1.发送者的可靠性
1.1生产者重连
有时候由于网络波动,可能会出现客户端连接MQ失败的情况。通过配置我们可以开启连接失败后的重连机制
1.2生产者确认
RabbitMQ了Publisher Confirm和Publisher Return两种确认机制。开启确认机制后,在MQ成功收到消息后会返回确认消息给生产者。返回的结果有以下几种情况:
1.消息投递到了MQ,但是路由失败。此时会通过Publisher Return返回路由异常原因,然后返回 ACK,告知投递成功。
2.(临时)消息投递到了MQ,并且入队成功,返回ACK,告知投递成功。
(持久)消息投递到了MQ,并且入队完成持久化,返回ACK,告知投递成
其他情况都会返回NACK,告知投递失败。
------------------------------------------------------------------
2.MQ的可靠性
在默认情况下,RabbitMQ会将接收到的信息保存在内存中以降低消息发送的延迟,然而会导致乱哥哥问题
1.一旦MQ待机,内存中的消息会丢失
2.内存空间有限,当消费者故障或处理慢时,会导致消息挤压,引发MQ阻塞
数据持久化
交换机持久化,队列持久化,消息持久化
Lazy Queue
从RabbitMQ的3.6.0版本开始,就增加了Lazy Queue的概念,也就是惰性队列。其特征如下:
1.接收到消息后直接存入磁盘而非内存(内存只保留最近的消息,默认2048条)
2.消费者要消费消息时才会从磁盘中读取并加载到内存
3.支持百万条的消息存储
在3.12版本后,所有队列都是Lazy Queue模式,无法更改。
3.消费者可靠性
3.1 消费者确认机制
为了确认消费者是否成功处理消息,RabbitMQ提供了消费者确认机制(Consumer Acknowledgement)。当消费者处理消息结束后,应该向RabbitMQ发送一个回执,告知RabbitMQ自己消息处理状态。回执有三种可选值:
1.ack:成功处理消息,RabbitMQ从队列中删除该消息
2.nack:消息处理失败,RabbitMQ需要再次投递消息
3.reject:消息处理失败并拒绝该消息,RabbitMQ从队列中删除该消息
3.2业务幂等性