- Half Message(半消息)
是指暫不能被Consumer消費的消息。Producer 已經把消息成功發送到了 Broker 端,但此消息被標記爲暫不能投遞
狀態,處於該種狀態下的消息稱爲半消息。需要 Producer
對消息的二次確認
後,Consumer才能去消費它。
- 消息回查
由於網絡閃段,生產者應用重啓等原因。導致 Producer 端一直沒有對 Half Message(半消息) 進行 二次確認。這時Brock服務器會定時掃描長期處於半消息的消息
,會主動詢問 Producer端 該消息的最終狀態(Commit或者Rollback),該消息即爲 消息回查。
- A服務先發送個Half Message給Brock端,消息中攜帶 B服務 即將要+100元的信息。
- 當A服務知道Half Message發送成功後,那麼開始第3步執行本地事務。
- 執行本地事務(會有三種情況1、執行成功。2、執行失敗。3、網絡等原因導致沒有響應)
- 如果本地事務成功,那麼Product主動向Brock服務器發送Commit,這樣B服務就可以消費該message。
- 如果本地事務失敗,那麼Product主動向Brock服務器發送Rollback,那麼就會直接刪除上面這條半消息。
- 如果因爲網絡等原因遲遲沒有返回失敗還是成功,那麼會執行RocketMQ的回調接口,來進行事務的回查(此時由Brock主動發送5)。
詳見:淺入淺出-RocketMQ https://juejin.im/post/5de3c8026fb9a07194761641