rabbitmq的unacked 问题

ack的设置

springboot项目 如果没有指定 rabbitmq 的应答方式,默认是自动应答,这样即使程序在处理消息 process过程中出现异常,这个消息也是被消费掉的。

为了保证消息的可靠性这里推荐采用手动方式应答,即通过代码实现。
ack配置

spring.rabbitmq.listener.acknowledge-mode: MANUAL

手动签收,并回馈信息给MQ

Long deliverTag = (Long) headers.get(AmqpHeaders.DELIVERY_TAG);

channel.basicAck(deliverTag, false);

消息unack 的异常出现场景

如若处理过程中出现异常,而没有回复ack 应答。通过后台就会看到有 unacked 的数据。

如果积压的多会导致程序无法继续消费数据(数量和消费者的线程数有关)。
解决办法 针对异常 做处理,捕捉到后 也回复ack应答。

程序断开于rabbitmq的链接后 unacked的消息状态会重新变为ready 等待消费。
代码更新后,server应用连接rabbitmq 就会重新消费掉消息。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 取经行动700/1001(17.8.24) 1. 前天看了一篇文章,题目是《她曾是靓丽模特,被大火毁容...却嫁给...
    石林萍阅读 802评论 4 5
  • 五年时间 有人结婚生子 有人职场得意 有人情场失意 有人双场都丰收 有人越发亭亭玉立 有人开始内外兼修 有人依旧帅...
    00CelineZ阅读 390评论 0 1
  • 文/晴天过后上一章 目录 飞到近前,蛋蛋一招大鹏展翅,一道金色光影出现,这道金色流光,衬得蛋蛋宛若天...
    晴天过后阅读 1,758评论 10 20