Post

事务消息

作用

  • 解耦、异步、削峰。

模型

  • 队列模型
    • 一对一共享消息
    • 消费者 拉取 消息的模式
  • 主题模型
    • 一对多广播消息

场景

  • 消息顺序问题
    • 在项目中没有遇到需要处理消息顺序的问题
    • 在业务层控制顺序问题,不依赖MQ服务
      • 1、生产者生产消息,存到数据库中
      • 2、通知消费者
      • 3、消费者依次取出消息消费
      • 4、消费成功后,改变数据库中消息的状态
  • 消息重复问题
    • 消费者业务层实现幂等性,数据库记录消息的状态,重复消费直接返回
  • 超大消息传输(消息体限制64k)

    • 1、生产者上传消息到oss
    • 2、发送oss的下载链接到消息体
    • 3、消费者根据oss下载链接从oss下载消息
      • 参考
        • mns:https://help.aliyun.com/document_detail/34481.html?spm=a2c4g.11186623.6.620.2a107f59zczh0M
  • mns事务消息

    • 事务消息队列:是业务消息的载体

    • 操作日志队列:存放业务消息的确认状态,若超时未确认,则检查生产者事务结果,提交/回滚消息。作用类似RocketMQ事务反查的机制

      • mns事务消息

      • 1、发送准备消息(消费者不可见)到事务队列

      • 2、发送消息写日志到操作日志队列

      • 3、生产者执行事务操作

      • 4、根据事务结果,提交/回滚消息

      • 5、提交消息操作确认日志

      • 6、7、8 消费者处理消息

        1
        2
        3
        4
        5
        
        第4步出现异常,导致消息操作日志未确认
        	1、mns服务定期扫描超时未确认的操作日子
        	2、向生产者检查事务结果
        	3、提交/回滚消息
        	4、确认操作日志
        
    • 参考

      • mns:https://help.aliyun.com/document_detail/34480.html?spm=a2c4g.11186623.6.621.7edd7f59PoDCcF
  • RocketMQ 事务消息

      • 其他步骤类似于mns的事务消息
      • 5、定期扫描超时未确认的事务消息,通过回调地址,检查本地事务状态,然后提交/回滚消息。
    • 参考
      • https://juejin.cn/post/6844904106532962311
This post is licensed under CC BY 4.0 by the author.