可以和朋友合資做網(wǎng)站嗎湖南正規(guī)關(guān)鍵詞優(yōu)化報(bào)價(jià)
RocketMQ事務(wù)性消息是一定能保證消息發(fā)送成功的
事務(wù)消息發(fā)送步驟:
(1)發(fā)送方將半事務(wù)消息發(fā)送至RocketMQ服務(wù)端。
(2)RocketMQ服務(wù)端將消息持久化之后,向發(fā)送方返回ack確認(rèn)消息已經(jīng)發(fā)送成功。由于消息為半事務(wù)消息,在未收到生產(chǎn)者對(duì)該消息的二次確認(rèn)前,此消息被標(biāo)記成“暫不能投遞”狀態(tài)。
(3)發(fā)送方開始執(zhí)行本地事務(wù)邏輯。
(4)發(fā)送方根據(jù)本地事務(wù)執(zhí)行結(jié)果向服務(wù)端提交二次確認(rèn)(Commit 或是 Rollback),服務(wù)端收到Commit 狀態(tài)則將半事務(wù)消息標(biāo)記為可投遞,訂閱方最終將收到該消息;服務(wù)端收到 Rollback 狀態(tài)則刪除半事務(wù)消息,訂閱方將不會(huì)接受該消息。
事務(wù)消息回查步驟:
(1)在斷網(wǎng)或者是應(yīng)用重啟的特殊情況下,上述步驟4提交的二次確認(rèn)最終未到達(dá)服務(wù)端,經(jīng)過(guò)固定時(shí)間后服務(wù)端將對(duì)該消息發(fā)起消息回查。
(2)發(fā)送方收到消息回查后,需要檢查對(duì)應(yīng)消息的本地事務(wù)執(zhí)行的最終結(jié)果。
(3) 發(fā)送方根據(jù)檢查得到的本地事務(wù)的最終狀態(tài)再次提交二次確認(rèn),服務(wù)端仍按照步驟4對(duì)半事務(wù)消息進(jìn)行操作。