对于发送方发送消息到RabbitMQ的可靠性机制
引入:在持久化的消息正确存⼊RabbitMQ之后,还需要有⼀段时间(虽然很短,但是不可忽视)才能存⼊磁盘中.RabbitMQ并不会为每条消息都进⾏同步存盘(调⽤内核的fsync⽅法)的处理, 可能仅仅保存到操作系统缓存之中⽽不是物理磁盘之中. 如果在这段时间内RabbitMQ服务节点发⽣了宕机、重启等异常情况, 消息保存还没来得及落盘, 那么这些消息将会丢失
RabbitMQ为我们提供了两种解决⽅案来实现持久化:
a. 通过事务机制实现
b. 通过发送⽅确认(publisher confirm) 机制实现
事务比较消耗信能,因此通常使用发送⽅确认(publisher confirm) 机制实现,RabbitMQ为我们提供了两个⽅式来控制消息的可靠性投递
1. confirm确认模式
2. return退回模式
注:这两个模式是不互斥的,可以同时存在
1、producer->Broker (发送方确认)
1)producer->exchange : confirm 模式
2)exchange->queue : return 模式
3)队列溢出:死信等
2、Broker (持久化(交换机、队列、消息))
3、Broker->Consumer
自动确认:消息送达到consumer时,消息会自动删除