mq如何通过异步命令组件做到顺序消费

本文探讨了如何在mq环境下,通过异步命令组件确保订单创建和订单修改的消息顺序消费。当订单修改消息可能先于订单创建消息到达时,系统将保存订单创建消息到表中并等待其业务完成,再执行订单修改的业务,从而保证业务顺序。具体实现参考GitHub项目链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景

当有一个业务需要监听订单创建和订单修改的消息 正常消费顺序肯定是需要先消费订单创建的消息 再消费订单修改的消息 不过也可能因为网络和mq投递速度的关系 导致订单修改的消息先发送到消费方 这就导致顺序乱了

在这里插入图片描述

异步命令组件如何做到顺序消费

https://github.com/bojiw/asyncmd
image

  • 收到订单创建的消息
  • 把消息内容放到异步命令对象中先保存到表中 然后返回给mq已经成功处理消息
  • 然后组件会执行对应的异步命令执行器 可以把具体的业务写入到这个执行器中

上面的是正常使用 而要做到顺序消费 再异步命令对象中有关联业务id(rely_biz_id)字段

  • 收到订单修改的消息
  • 把消息内容放到异步命令对象中并且设置rely_biz_id为订单创建消息的业务id
  • 保存到表中
  • 执行的时候组件会先通过rely_biz_id查询是否有订单创建的消息已经成功消费并且也已经处理了对应的业务
  • 如果订单创建的对应业务没有处理 则不执行
  • 等订单创建的对应业务处理成功 则会执行订单修改的异步命令执行器处理业务
    image
    具体代码案例
    https://github.com/bojiw/asyn-springboot-demo
    OrderCreateListener和OrderModifyListener实现mq的顺序消费 保证同一笔订单肯定先处理订单创建消息 再处理订单修改消息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值