這是阿里的分佈式事務圖: 服務器
若是回查,那麼必定要先查看當前事務的執行狀況,再看是否須要從新執行本地事務。 本地事務執行成功後,返回Commit進行消息二次確認的時候的服務掛了,在重啓服務那麼這個時候在brock端,它仍是個Half Message(半消息),這也會回查。若是不先查看當前事務的執行狀況,而是直接執行事務,那麼就至關於成功執行了兩個本地事務。網絡
最終一致性分佈式
RocketMQ是一種最終一致性的分佈式事務,就是說它保證的是消息最終一致性,而不是像2PC、3PC、TCC那樣強一致分佈式事務,至於爲何說它是最終一致性事務下面會詳細說明。blog
Half Message(半消息)接口
是指暫不能被Consumer消費的消息。Producer 已經把消息成功發送到了 Broker 端,但此消息被標記爲暫不能投遞狀態,處於該種狀態下的消息稱爲半消息。須要 Producer事務
對消息的二次確認後,Consumer才能去消費它。it
消息回查im
因爲網絡閃段,生產者應用重啓等緣由。致使 Producer 端一直沒有對 Half Message(半消息) 進行 二次確認。這是Brock服務器會定時掃描長期處於半消息的消息,會d3
主動詢問 Producer端 該消息的最終狀態(Commit或者Rollback),該消息即爲 消息回查。img
如下單流程爲例: