我正在使用Spring Boot(版本2.2.7.RELEASE因此是spring Rabbit 2.2.6)和RabbitMQ 3.3.5。为什么RabbitTemplate
不能使用直接回复?经纪人有什么配置吗?
春天兔子配置:
@Configuration
@EnableRabbit
public class RabbitConfig {
private String host = "localhost";
private int port = 5672;
private String username = "admin";
private String password = "admin";
private String exchangeName = "xxx";
private String queueName = "qqq";
@Bean
public ConnectionFactory connectionFactory(){
CachingConnectionFactory factory = new CachingConnectionFactory();
factory.setHost(this.host);
factory.setPort(this.port);
factory.setUsername(this.username);
factory.setPassword(this.password);
return factory;
}
@Bean
public RabbitAdmin rabbitAdmin(ConnectionFactory factory){
RabbitAdmin admin = new RabbitAdmin(factory);
return admin;
}
@Bean
public Queue queue(){
return new Queue(this.queueName, true);
}
@Bean
public Exchange exchange(){
return new DirectExchange(this.exchangeName, true, false);
}
@Bean
public Binding binding(Queue queue, Exchange exchange){
return BindingBuilder.bind(queue).to(exchange).with(queue.getName()).noargs();
}
@Bean
public RabbitListenerContainerFactory rabbitListenerContainerFactory(ConnectionFactory cFactory){
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setConnectionFactory(cFactory);
factory.setMessageConverter(messageConverter());
factory.setAcknowledgeMode(AcknowledgeMode.AUTO);
return factory;
}
@Bean
public RabbitTemplate rabbitTemplate(ConnectionFactory factory){
RabbitTemplate rabbitTemplate = new RabbitTemplate(factory);
rabbitTemplate.setMessageConverter(messageConverter());
return rabbitTemplate;
}
@Bean
public MessageConverter messageConverter(){
//return new Converter();
Jackson2JsonMessageConverter jackson2JsonMessageConverter = new Jackson2JsonMessageConverter();
jackson2JsonMessageConverter.getJavaTypeMapper().addTrustedPackages("com.mhr.xp.amqp", "java.lang");
return jackson2JsonMessageConverter;
}
}
在这里我使用RabbitTemplate:
Object o = rabbitTemplate.convertSendAndReceive("xxx", "qqq", new Dto("ggg"));
我得到以下警告:
2020-05-15 23:06:59.188 WARN 15681 --- [main] osamqp.rabbit.core.RabbitTemplate:经纪人不支持通过“ amq.rabbitmq.reply-to”进行快速回复,将使用临时队列:channel错误; 协议方法:#method(回复代码= 404,回复文本= NOT_FOUND-虚拟主机'/'中没有队列'amq.rabbitmq.reply-to',类ID = 50,方法ID = 10)。
直接答复添加到3.4版本的RabbitMQ中。
当前版本是3.8.3。
https://www.rabbitmq.com/download.html
https://docs.spring.io/spring-amqp/docs/2.2.6.RELEASE/reference/html/#direct-reply-to
从3.4.0版本开始,RabbitMQ服务器支持直接回复。这消除了固定答复队列的主要原因(以避免为每个请求创建临时队列)。从Spring AMQP版本1.4.1开始,默认情况下使用直接回复(如果服务器支持)...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句