服务异步通信

MQ的一些常见问题

  • 消息可靠性问题:如何确保发送的消息至少被消费一次
  • 延迟消息问题:如何实现延迟消息投递
  • 高可用问题:如何避免单点的MQ故障而导致的不可用问题
  • 消息堆积问题:如何解决数百万消息堆积,无法及时消费的问题

消息可靠性问题

消息从生产者发送到exchange,再到queue,再到消费者,有哪些导致消息丢失的可能性?

  • 发送时丢失:
    • 生产者发送的消息未送达exchange
    • 消息到达exchange后未到达queue
  • MQ宕机,queue将消息丢失
  • consumer接收到消息后未消费就宕机

一 消息可靠性

1.生产者消息确认

生产者确认机制

RabbitMQ提供了publisher confirm机制来避免消息发送到MQ过程中丢失。消息发送到MQ以后,会返回一个结果给发送者,表示消息是否处理成功。结果有两种请求:

2.消息持久化

3.消费者消息确认

4.消费失败重试机制

二 死信交换机

三 惰性队列

四 MQ集群