记一个小坑

来源:5-11 利用RabbitListener快速实现消息处理器(上)

LBruce

2021-04-03

在测试使用Jackson2JsonMessageConverter,@RabbitListener,@RabbitHandler的时候,一并在配置文件中配置了acknowledge-mode为manual。结果在消费者方法中调用channel.basicAck(deliveryTag, false)抛出错误,提示

reply-code=406, reply-text=PRECONDITION_FAILED - unknown delivery tag 1

很明显是因为这个deliveryTag为1的消息已经被确认了,所以在手动调用basicAck的时候才发生错误,即手动ack并没有生效。。。
查阅了一下资料后发现,可以在声明RabbitListenerContainerFactory的时候,设置一下AcknowledgeMode,问题才得以解决
图片描述
手动ACK不生效的原因好像是因为加上了factory.setMessageConverter(new Jackson2JsonMessageConverter())这一行代码,ack就被设置为auto ack。。。即便配置文件配置了manual,也不起作用。。。。

写回答

1回答

Moody

2021-04-06

感谢分享

1
1
LBruce
谢谢老师
2021-04-06
共1条回复

RabbitMQ精讲,提升工程实践能力,培养架构思维

消息驱动架构+订单状态机,二次开发,手写分布式事务框架。

477 学习 · 205 问题

查看课程