RockerMQ的事务消息发送

RocketMQ的事务消息发送

根据样例来看,发送事务消息采用了以下流程

1.TransactionListener 给事务打标记
2.TransactionProducer.sendMessageInTransaction 发生消息,并调用
defaultMQProducerImpl.sendMessageInTransaction,这里会给message打上 PROPERTY_TRANSACTION_PREPARED prepared的标记
3.处理返回状态时 LocalTransactionState=返回对象的 Pair

4.最后根据事务状态 进行处理 如果commit则此消息commit 否则 rollback 或者unknown
5.其后执行钩子调用 满足trace的场景
6.生成END_TRANSACTION 标识消息 调用netty结束本次会话
整体来看
1.使用 TransactionMQProducer 发送事务消息
2.使用 TransactionListenerImpl 做本地事务监听和刷新
3.采用了类似二阶段提交的方式 实现事务消息

PS:
1.所谓的本地事务,是指本地带事务控制的一般代码,例如spring中的Transactional 注解
2.LocalTransactionExecuter 已经被弃用,改用了TransactionListener,因此RocketMQ可以不指定事务控制器
一个完整的事务大致如下
1.接收到save请求
2.处理save请求
2.1 开启会话事务,生成“本地记录”
2.2 生成“本地消息”记录,发送”prepared“事务消息
2.3 保存“本地记录”
2.3.1 保存成功,则“本地消息”记录为commit
2.3.2 保存失败,则 “本地消息”记录为rollback
2.4 关闭会话事务
2.5 发送 end消息
就不画图了,参考
https://blog.csdn.net/xiaodigua1024/article/details/129876328
https://zhuanlan.zhihu.com/p/608556644

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值