RocketMQ源碼之 事務消息的回調方法應該怎么寫?


兩個回調方法:發送消息成功之后執行事務的executeLocalTransaction,回查時候調用的checkLocalTransaction。

我的思路:執行事務的時候,調用service的方法,這個方法需要用事務注解,方法參數中傳入唯一id,事務方法最后判斷如果id不為空,說明此時是事務消息在調用,往事務表中插入唯一id,標志事務成功執行。而回查的時候用這個唯一id去事務表中查詢。

問題:

1、怎樣在兩個回調方法中獲取到這個唯一id?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來取代這個UNIQ_KEY。

2、service的方法的調用可以借助sendMessageInTransaction的第二個參數,傳入一個匿名內部類即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM