rabbitmq:消费消息时手动ack报错(Channel shutdown: channel error; protocol method)
错误详细信息:
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)
原因:采用@RabbitListener注解实现的消费者默认ackMode是auto,即使yml文件中配置了spring.rabbitmq.listener.simple.acknowledge-mode: manual 也不行
解决方案:
-
不用手动ack,直接采用默认的ack
-
设置ackMode的值为MANUAL
@RabbitListener(bindings = @QueueBinding( value = @Queue(name = "topic.dog"), exchange = @Exchange(value = "binding.dog", type = ExchangeTypes.TOPIC)), ackMode = "MANUAL" ) public void process(String msg, Channel channel, Message message) { log.info("dog-收到消息-成功:{}", msg); }