【转载】关于RabbitMQ的消息确认


      RabbitMQ 将消息投递到客户端后,客户端如果没处理完这个消息就死掉了,这个消息还会不会存在?这取决于 RabbitMQ 的消息确认机制(Message acknowledgment)是否打开。

      为了确保消息不会丢失,RabbitMQ 支持消息确认机制。(在开启了消息确认机制后)客户端需要在收到消息并处理完后,发送一个 ack 消息给 RabbitMQ,告诉它该消息可以被安全删除了。假如客户端在发送 ack 之前意外死掉了,那么 RabbitMQ 会将消息投递到下一个 consumer 客户端。如果有多个 consumer 客户端,RabbitMQ 在投递消息时是轮询的。

      RabbitMQ 如何判断客户端死掉了?唯一根据是客户端连接是否断开。这里没有超时机制,也就是说客户端可以处理一个消息很长时间,只要没断开连接,RabbitMQ 就一直等待 ack 消息。

消息确认机制默认打开的,除非你设置 no_ack=True 标记来手工关闭它。

通过如下命令查看系统里的未确认消息:

#rabbitmqctl list_queues -p /path name messages_unacknowledged
Listing queues …
queue_storm_actionlog 0
dev_queue_storm_actionlog 0
…done.


转载于:https://my.oschina.net/moooofly/blog/92264

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值