1、发送方确认模式

①将信道设置成confirm模式(发送方确认模式),则所有在信道上发布的消息都会被指派一个 唯一的ID。

②一旦消息被投递到目的队列后,或者消息被写入磁盘后(可持久化的消息),信道会发送一个 确认给生产者(包含消息唯一 ID)。

③如果RabbitMQ发生内部错误从而导致消息丢失,会发送一条 nack(notacknowledged, 未确认)消息。

④发送方确认模式是异步的,生产者应用程序在等待确认的同时,可以继续发送消息。当确认 消息到达生产者应用程序,生产者应用程序的回调方法就会被触发来处理确认消息。

2、接收方确认机制

①消费者接收每一条消息后都必须进行确认(消息接收和消息确认是两个不同操作)。只有消费 者确认了消息,RabbitMQ 才能安全地把消息从队列中删除。

②这里并没有用到超时机制,RabbitMQ仅通过Consumer的连接中断来确认是否需要重新发 送消息。也就是说,只要连接不中断,RabbitMQ给了Consumer足够长的时间来处理消息。 保证数据的最终一致性。

3、下面罗列几种特殊情况

①如果消费者接收到消息,在确认之前断开了连接或取消订阅,RabbitMQ会认为消息没有被 分发,然后重新分发给下一个订阅的消费者。(可能存在消息重复消费的隐患,需要去重)

②如果消费者接收到消息却没有确认消息,连接也未断开,则RabbitMQ认为该消费者繁忙, 将不会给该消费者分发更多的消息。