Spring boot 使用默认exchange声明第二个队列会产生错误

Spring boot 使用默认exchange声明第二个队列会产生错误,spring-boot,rabbitmq,spring-amqp,Spring Boot,Rabbitmq,Spring Amqp,弹簧靴1.5.15 当我声明一个队列时,该队列被声明,发送/接收工作正常。 如果我添加第二个和后续队列,则会记录一个错误,队列会被重新声明5次,最后应用程序无法启动 Spring引导RabbitMQ配置: @Configuration public class RabbitConfig implements RabbitListenerConfigurer { @Autowired private ObjectMapper mapper;

弹簧靴1.5.15

当我声明一个队列时,该队列被声明,发送/接收工作正常。 如果我添加第二个和后续队列,则会记录一个错误,队列会被重新声明5次,最后应用程序无法启动

Spring引导RabbitMQ配置:

    @Configuration
    public class RabbitConfig implements RabbitListenerConfigurer {

        @Autowired
        private ObjectMapper mapper;

        @Bean
        Queue crmAppealQueue(@Value("${app.queues.portalAppeal}") String queueName) {
            return new Queue(queueName, false);
        }

        @Bean
        Queue portalUserQueue(@Value("${app.queues.portalUser}") String queueName) {
            return new Queue(queueName, false);
        }

        @Override
        public void configureRabbitListeners(RabbitListenerEndpointRegistrar registrar) {
            registrar.setMessageHandlerMethodFactory(messageHandlerMethodFactory());
        }

        @Bean
        MessageHandlerMethodFactory messageHandlerMethodFactory() {
            DefaultMessageHandlerMethodFactory messageHandlerMethodFactory = new DefaultMessageHandlerMethodFactory();
            messageHandlerMethodFactory.setMessageConverter(consumerJackson2MessageConverter());
            return messageHandlerMethodFactory;
        }

        @Bean
        public MappingJackson2MessageConverter consumerJackson2MessageConverter() {
            return new MappingJackson2MessageConverter();
        }

        @Bean
        public RabbitTemplate rabbitTemplate(final ConnectionFactory connectionFactory) {
            final RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
            rabbitTemplate.setMessageConverter(producerJackson2MessageConverter());
            return rabbitTemplate;
        }

        @Bean
        public Jackson2JsonMessageConverter producerJackson2MessageConverter() {
            return new Jackson2JsonMessageConverter(mapper);
        }
}
有错误的日志:

2018-29-08 15:04:52,075  INFO (RabbitAdmin.java:566) - Auto-declaring a non-durable, auto-delete, or exclusive Queue (portal.appeal) durable:false, auto-delete:false, exclusive:false. It will be redeclared if the broker stops and is restarted while the connection factory is alive, but all messages will be lost.
2018-29-08 15:04:52,075  INFO (RabbitAdmin.java:566) - Auto-declaring a non-durable, auto-delete, or exclusive Queue (portal.user) durable:false, auto-delete:false, exclusive:false. It will be redeclared if the broker stops and is restarted while the connection factory is alive, but all messages will be lost.
2018-29-08 15:04:52,122 ERROR (CachingConnectionFactory.java:1327) - Channel shutdown: channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - inequivalent arg 'durable' for queue 'portal.user' in vhost '/': received 'false' but current is 'true', class-id=50, method-id=10)

好吧,这是一个愚蠢的想法

我假设每次声明队列时都会从头创建一个队列,但在我的配置中,情况并非如此

事实上,它已经存在了一个不同的耐久性参数-这正是错误消息试图告诉我的


解决方案:我使用AmqAdmin.deleteQueue将其删除

portal.user队列已经存在,其设置与您在此处配置的不同,这就是错误消息告诉您的内容。您不能重新声明队列。同意,这是log msg的建议,但我仔细检查了它以确保情况并非如此。更新问题
2018-29-08 17:21:49,435  INFO (AbstractConnectionFactory.java:379) - Created new connection: rabbitConnectionFactory#74ba4614:0/SimpleConnection@2a6c087d [delegate=amqp://precrm@192.168.82.177:5672/, localPort= 63501]
2018-29-08 17:21:49,435  INFO (RabbitAdmin.java:566) - Auto-declaring a non-durable, auto-delete, or exclusive Queue (portal.appeal) durable:false, auto-delete:false, exclusive:false. It will be redeclared if the broker stops and is restarted while the connection factory is alive, but all messages will be lost.
2018-29-08 17:21:49,529  INFO (StartupInfoLogger.java:57) - Started PortalAppealMessageHandlerTest in 5.317 seconds (JVM running for 6.599)