如何保证MQ消息必达

此文章属于笔记,原属58沈剑

1、MQ消息必达,架构上的两个核心设计点:

  1. 消息落地
  2. 消息超时、重传、确认
  3. 四大部件:发送端 接收端 服务端 固化存储组成

2、上半场消息必达以及消息重复问题

  1. 上半场的流程
    1. 发送端MQ-client 将消息发送给服务端MQ-server
    2. 服务端MQ-server将消息落地
    3. 服务端MQ-server 回ACK(表示确认) 2.若是3丢失 发送端在超时后,又会发送一遍,此时重发是MQ-client发起的,消息处理的是MQ-server 为了不2 重复落地,对每条MQ消息系统内部须要生成一个inner-msg-id,做为去重和幂等的依据,这个内部消息ID 的特色是
    4. 全局惟一
    5. MQ生成,具有业务无关性,对消息发送方和消息接收

3、下半场的消息必达以及消息重复问题

  1. 下半场的流程
    1. 服务端将消息发给MQ-client
    2. MQ-client将消息消费 并通知MQ-server
    3. MQ-server 落地消息删除
  2. 须要强调的是,接收端MQ-client回ACK消息是MQ-client主动发起的,由于MQ-server不知道接收端什么时候消费完。 3.若是5丢失,那么在超时后MQ-server会从新发送消息,此时可能致使MQ-client收到重复消息,为了保证业务的幂等性,业务消息中,必须有一个biz-id,做为去重的依据,这个业务ID的特性是
    1. 对于同一个业务场景,全局惟一
    2. 由业务消息发送方生成,业务相关
    3. 由业务消费方消费判断重复问题,以保证幂等

4、总结

MQ为了保证消息必达,消息上下半场都可能发送重复消息,如何保证消息的幂等性呢架构

  1. 上半场,MQ-server生成inner-msg-id,保证上半场幂等 此ID全局惟一,业务无关,由MQ保证,对上下MQ-client屏蔽
  2. 下半场,由发送方带入biz-id 业务方接受并判断重复问题,保证幂等,这个ID对单业务惟一,业务相关,对MQ透明 结论 幂等性,不只对MQ有要求,对业务上下游也有要求
相关文章
相关标签/搜索