RabbitTemplate:Broker 不支持通过 'amq.rabbitmq.reply-to' 快速回复

RabbitTemplate: Broker does not support fast replies via 'amq.rabbitmq.reply-to'

我正在使用 Spring 引导(版本 2.2。7.RELEASE 因此 spring rabbit 2.2.6)和 RabbitMQ 3.3.5。为什么RabbitTemplate不能使用直接回复?经纪人有什么配置吗?

spring兔子配置:

@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] o.s.amqp.rabbit.core.RabbitTemplate : Broker does not support fast replies via 'amq.rabbitmq.reply-to', temporary queues will be used: channel error; protocol method: #method(reply-code=404, reply-text=NOT_FOUND - no queue 'amq.rabbitmq.reply-to' in vhost '/', class-id=50, method-id=10).

在 RabbitMQ 3.4 版本中添加了直接回复。

当前版本是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

Starting with version 3.4.0, the RabbitMQ server supports direct reply-to. This eliminates the main reason for a fixed reply queue (to avoid the need to create a temporary queue for each request). Starting with Spring AMQP version 1.4.1 direct reply-to is used by default (if supported by the server) ...