RocketMQ事務消息機制


消息發送

  普通發送消息,是直接根據topic的queue最終寫入到commitlog的,然后可以被消費者消費。比如現在往broker的orderTopic發送事務,不會先把half消息的offset寫入orderTopic的queue里面去,而是寫入broker內部的“RMQ_SYS_TRANS_HALF_TOPIC”對應的ConsumeQueue里面去。此時消息必然在broker內部了,那就會認為half消息寫入成功了,然后響應給發送者;所以此時消費者還沒發看到這條half消息。

  

消息確認

  然后producer執行完業務邏輯后,就會發送rollback/commit狀態確認。或者網絡故障producer沒有收到half消息的響應、又或者發送rollback/commit失敗,此時broker一直收不到producer的信號,它后台就會回查消息判斷狀態。但是它最多回查15次,15次都沒拿到消息狀態就會將它rollback。

  

rollback

  假設現在消息rollback后,那么消息就要回滾,不過broker不是直接將消息刪除掉,而是通過內部的op_topic標記half消息為rollback。

  

commit

   如果消息commit后,則內部的op_topic標記half消息為commit,然后把消息寫到orderTopic里面去,此時consumer就可以消費了。

   


免責聲明!

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



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