如何确保消息正确地发送至RabbitMQ? 如何确保消息接收方消费了消息?
Posted 四猿外
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何确保消息正确地发送至RabbitMQ? 如何确保消息接收方消费了消息?相关的知识,希望对你有一定的参考价值。
发送方确认模式
将信道设置成confirm 模式(发送方确认模式), 则所有在信道上发布的消息都会被指派一个唯一的ID。
一旦消息被投递到目的队列后,或者消息被写入磁盘后(可持久化的消息), 信道会发送一个确认给生产者(包含消息唯一ID)。
如果RabbitMQ 发生内部错误从而导致消息丢失,会发送一条nack(notacknowledged,未确认)消息。
发送方确认模式是异步的,生产者应用程序在等待确认的同时, 可以继续发送消息。当确认消息到达生产者应用程序,生产者应用程序的回调方法就会被触发来处理确认消息。
接收方确认机制
消费者接收每一条消息后都必须进行确认(消息接收和消息确认是两个不同操作) 。只有消费者确认了消息, RabbitMQ 才能安全地把消息从队列中删除。这里并没有用到超时机制, RabbitMQ 仅通过Consumer 的连接中断来确认是否需要重新发送消息。也就是说,只要连接不中断, RabbitMQ 给了Consumer 足够长的时间来处理消息。保证数据的最终一致性;
下面罗列几种特殊情况
如果消费者接收到消息,在确认之前断开了连接或取消订阅,RabbitMQ 会认为消息没有被分发,然后重新分发给下一个订阅的消费者。( 可能存在消息重复消费的隐患,需要去重)
如果消费者接收到消息却没有确认消息, 连接也未断开,则RabbitMQ 认为该消费者繁忙,将不会给该消费者分发更多的消息。
以上是关于如何确保消息正确地发送至RabbitMQ? 如何确保消息接收方消费了消息?的主要内容,如果未能解决你的问题,请参考以下文章