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 【真正解决】