消息确认

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

旧街凉风 提交于 2019-11-27 07:09:16
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. 来源: