Bootstrap

[rabbitmq] Channel shutdown: channel error; protocol method: #method<channel.close>(reply-code=406

rabbitmq 报错日志:

2021-05-08 15:30:00,023 ---[ visitor ]--- ERROR [AMQP Connection ip:5672] Caller+0   at org.springframework.amqp.rabbit.connection.CachingConnectionFactory$DefaultChannelCloseLogger.log(CachingConnectionFactory.java:1278)
 - Channel shutdown: channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - unknown delivery tag 1, class-id=60, method-id=80)

其本质原因就是 double check

在yml配置文件中,是配置了手动确认,但是在rabbitconfig 配置文件中,被覆盖了,实际上是手动确认。然后在收到消息的时候又是 手动确认一遍。结果就是自动确认了一遍,手动又确认了一遍。

解决办法就是配置文件中不要覆盖,配置文件中声明是手动确认。

在RabbitConfig.java中

    @Bean
    public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(ConnectionFactory connectionFactory) {
        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
        factory.setConnectionFactory(connectionFactory);
        factory.setMessageConverter(new Jackson2JsonMessageConverter());
        return factory;
    }

改为

    @Bean
    public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(ConnectionFactory connectionFactory) {
        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
        factory.setAcknowledgeMode(AcknowledgeMode.MANUAL);
        factory.setConnectionFactory(connectionFactory);
        factory.setMessageConverter(new Jackson2JsonMessageConverter());
        return factory;
    }

 

参考:

https://fzy15116089232.blog.csdn.net/article/details/112037977

记一次rabbitmq因double ack导致的报错:method channel.close (reply-code=406, reply-text=PRECONDITION_FAILED 【真正解决】

;