- 如何确保消息发送成功,被消费者接收?
- 如何实现消息的延迟投递?
- 如何解决数百万消息堆积,无法及时消费的问题?
- 如何避免单点的MQ故障而导致的不可用问题?
消息可靠性
如何保证消息发送成功?
消息发送过程中,有三处地方会丢失消息
- 消息未发送到交换机 ——-> 消息确认
- 消息发送到交换机,但是未发送到队列 ——-> 消息回退
- 队列接收到消息,未来得及处理消息就宕机 ——->
消息确认
发送消息时,需要为每个消息设置一个 id
# 消息确认(消息发送到交换机后返回确认码) |
publisher-confirm
- 消息发送到交换机,返回 ack
- 消息未发送到交换机,返回 nack
消息回退
消息发送到交换机,但是没有路由到队列。返回 ack 以及路由失败的原因
publisher-return
# 消息回退(交换机发送消息到队列后返回确认码) |
消息回退后的处理方式
- true:调用ReturnCallback
- false:丢弃消息
spring.rabbitmq.template.mandatory=false |
延迟消息
消息堆积
高可用
参考文章: