天天看点

如何确保消息正确地发送至 RabbitMQ? 如何确保消息接收方消费了消息?

发送方确认模式 

将信道设置成 confirm 模式(发送方确认模式),则所有在信道上发布的消息都 

会被指派一个唯一的 ID。

一旦消息被投递到目的队列后,或者消息被写入磁盘后(可持久化的消息),信 

道会发送一个确认给生产者(包含消息唯一 ID)。

如果 RabbitMQ 发生内部错误从而导致消息丢失,会发送一条 nack(not

acknowledged,未确认)消息。

发送方确认模式是异步的,生产者应用程序在等待确认的同时,可以继续发送消 

息。当确认消息到达生产者应用程序,生产者应用程序的回调方法就会被触发来 

处理确认消息。

接收方确认机制 

接收方消息确认机制 

消费者接收每一条消息后都必须进行确认(消息接收和消息确认是两个不同操 

作)。只有消费者确认了消息,RabbitMQ 才能安全地把消息从队列中删除。

这里并没有用到超时机制,RabbitMQ 仅通过 Consumer 的连接中断来确认是否 

需要重新发送消息。也就是说,只要连接不中断,RabbitMQ 给了 Consumer 足 

够长的时间来处理消息。保证数据的最终一致性;

下面罗列几种特殊情况 

如果消费者接收到消息,在确认之前断开了连接或取消订阅,RabbitMQ 会认为 

消息没有被分发,然后重新分发给下一个订阅的消费者。(可能存在消息重复消 

费的隐患,需要去重)

如果消费者接收到消息却没有确认消息,连接也未断开,则 RabbitMQ 认为该消 

费者繁忙,将不会给该消费者分发更多的消息。

Java Program!