RocketMQ源码之 事务消息的回调方法应该怎么写?

Posted chuliang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RocketMQ源码之 事务消息的回调方法应该怎么写?相关的知识,希望对你有一定的参考价值。

两个回调方法:发送消息成功之后执行事务的executeLocalTransaction,回查时候调用的checkLocalTransaction。

思路:执行事务的时候,调用service的方法,这个方法需要用事务注解,方法参数中传入唯一id,事务方法最后判断如果id不为空,往事务表中插入唯一id,标志事务成功执行。而回查的时候用这个唯一id去事务表中查询。

问题:

1、executeLocalTransaction的参数是message和arg,在send方法完成之后,会把send方法中为每一个message生成的唯一id赋值给transactionId,也就是说在executeLocalTransaction方法中是能获取这个id,而checkLocalTransaction方法中的参数MessageExt打印的时候会发现,message的properties中有UNIQ_KEY的值是transactionId,message自己也有transactionId属性,个人建议用properties中的属性。那么现在在checkLocalTransaction中也可以获取这个id了。另外也可以用message.putUserProperty自己添加一个uuid。

2、service的方法的调用可以借助sendMessageInTransaction的第二个参数,传入一个匿名内部类即可。

以上是关于RocketMQ源码之 事务消息的回调方法应该怎么写?的主要内容,如果未能解决你的问题,请参考以下文章

RocketMQ事务消息篇之事务消息源码分析

RocketMQ源码分析之从官方示例窥探:RocketMQ事务消息实现基本思想

RocketMQ源码分析之RocketMQ事务消息实现原理中篇----事务消息状态回查

RocketMQ源码分析之RocketMQ事务消息实现原理中篇----事务消息状态回查

RocketMQ源码分析之RocketMQ事务消息实现原下篇(事务提交或回滚)

RocketMQ源码之 consumer是怎样消费消息的