zoukankan      html  css  js  c++  java
  • 如何保证MQ消息必达

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

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

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

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

    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生成,具备业务无关性,对消息发送方和消息接收

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

    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. 由业务消费方消费判断重复问题,以保证幂等

    四、总结

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

    1. 上半场,MQ-server生成inner-msg-id,保证上半场幂等 此ID全局唯一,业务无关,由MQ保证,对上下MQ-client屏蔽
    2. 下半场,由发送方带入biz-id 业务方接受并判断重复问题,保证幂等,这个ID对单业务唯一,业务相关,对MQ透明 结论 幂等性,不仅对MQ有要求,对业务上下游也有要求
  • 相关阅读:
    较简单的date转化成格式化的timeString
    字符串截取的用法
    UIImageView的图片轮播属性
    label.lineBreakMode设置lable中文字过长时的显示格式,其中可以有末尾以省略号显示。
    UIImageView的contentMode属性
    iOS开发----关于导航条的研究
    iOS 开发对图片进行处理
    设置按钮中的图片的旋转,并且旋转之后不变形
    调整按钮的子控件titleLable和imageView的间距的属性和用法
    ios开发之--数据库开发
  • 原文地址:https://www.cnblogs.com/wangmy/p/7120520.html
Copyright © 2011-2022 走看看