跳到主要内容

如何设计消息队列

消息队列主要有哪些应用场景

  1. 解耦(最主要):上下游消息均通过MQ交互而非直接交互,如上游订单模块的订单完成消息仅需将消息发送至MQ,下游积分模块也仅需读取MQ,如果后续添加账单分析模块也仅需与MQ交互;解耦的前提是上游(消息生产者)不关心下游(消费者)的处理结果
  2. 削峰:下游系统可以根据自身处理能力从MQ中消费消息,如大量的web请求可以写入消息队列中,下游数据库按自身处理能力消费
  3. 异步:多个不同的下游系统可以同时消费同一条消息;多个相同下游消费不同消息

如何保证消息不丢失

  1. 生产者发送并重试消息直到MQ返回ACK
  2. MQ保证消息写入磁盘后才返回ACK(防止消息在page cache时丢失)
  3. 消费者消费成功后ACK

如何保证消息不重复

如何保证消息顺序

如何处理死信

如何存储消息