抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >
  1. 如何确保消息发送成功,被消费者接收?
  2. 如何实现消息的延迟投递?
  3. 如何解决数百万消息堆积,无法及时消费的问题?
  4. 如何避免单点的MQ故障而导致的不可用问题?

消息可靠性

如何保证消息发送成功?

消息发送过程中,有三处地方会丢失消息

  1. 消息未发送到交换机 ——-> 消息确认
  2. 消息发送到交换机,但是未发送到队列 ——-> 消息回退
  3. 队列接收到消息,未来得及处理消息就宕机 ——->

消息确认

发送消息时,需要为每个消息设置一个 id

# 消息确认(消息发送到交换机后返回确认码)
spring.rabbitmq.publisher-confirm-type=correlated

publisher-confirm

  • 消息发送到交换机,返回 ack
  • 消息未发送到交换机,返回 nack

消息回退

消息发送到交换机,但是没有路由到队列。返回 ack 以及路由失败的原因

publisher-return

# 消息回退(交换机发送消息到队列后返回确认码)
spring.rabbitmq.publisher-returns=true

消息回退后的处理方式

  • true:调用ReturnCallback
  • false:丢弃消息
spring.rabbitmq.template.mandatory=false

延迟消息

消息堆积

高可用

参考文章:

RabbitMQ高级特性

评论