SpringCloud程序员rabbitMQ

rabbitmq的unacked 问题

2018-11-19  本文已影响24人  良人与我

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 就会重新消费掉消息。

上一篇 下一篇

猜你喜欢

热点阅读