阿里云國際站經(jīng)銷商,主營阿里云,騰訊云,華為云,亞馬遜aws,谷歌云gcp,微軟云az,免費開戶,代充值優(yōu)惠大,聯(lián)系客服飛機@jkkddd
前提條件
您已創(chuàng)建以下隊列,具體操作,請參見創(chuàng)建隊列。
事務消息隊列
消息存活時間小于消息延時時間。
當消息發(fā)送成功、事務操作成功時,生產者修改消息延遲時間,消息對消費者可見。
當消息發(fā)送成功、事務操作失敗時,生產者不修改消息延遲時間,消息對消費者不可見。
操作日志隊列
記錄事務消息的操作記錄信息。消息延時時間為事務消息操作超時時間。日志隊列中的消息確認后將對消費者不可見。
原理介紹
一些業(yè)務場景需要保證本地操作和消息發(fā)送的事務一致性,即消息發(fā)送成功,本地操作成功。如果消息發(fā)送成功,本地操作失敗,那么發(fā)送成功的消息需要回滾。
消息發(fā)送成功,事務操作成功時操作步驟如下所示:
生產者發(fā)送一條事務準備消息到事務消息隊列。
生產者發(fā)送操作日志消息到操作日志隊列,日志中包含步驟1消息的消息句柄。
生產者執(zhí)行本地事務操作成功。
生產者請求修改消息延遲時間,使消息對消費者可見。
生產者向操作日志隊列確認操作日志,刪除日志消息。
消費者從事務消息隊列中接收事務消息。
消費者處理事務消息。
消費者請求刪除事務消息。
消息發(fā)送成功,事務操作失敗時操作步驟如下所示:
生產者發(fā)送一條事務準備消息到事務消息隊列。
生產者發(fā)送操作日志信息到操作日志隊列,日志中包含步驟1消息的消息句柄。
生產者執(zhí)行本地事務操作失敗。
操作日志隊列向生產者發(fā)送消息,請求讀取超時未確認操作日志。
生產者檢查事務結果,發(fā)現(xiàn)操作失敗。
生產者提交回滾消息請求,不修改消息延遲時間,消息對消費者不可見。
生產者向操作日志隊列確認操作日志,刪除日志消息。
示例代碼
消息服務MNS最新的Java SDK(1.1.8)中的TransactionQueue支持上述事務消息方案。在TransactionOperations和TransactionChecker兩個接口添加業(yè)務操作和檢查邏輯,您就可以方便地實現(xiàn)事務消息
異常分析
生產者異常(例如進程重啟)
讀取操作日志隊列中超時未確認日志。
檢查事務結果。
如果檢查到事務執(zhí)行成功,則提交消息。
確認操作日志。
消費者異常(例如進程重啟)
消息服務MNS提供至少保證消費一次的特性,如果當前消費者沒有成功消費并刪除消息,消息在不可見時間后將繼續(xù)可見,被當前消費者或者其他消費者處理。
消息服務MNS服務不可達(例如斷網(wǎng))
消息發(fā)送和接收處理狀態(tài)及操作日志都在消息服務MNS服務端,消息服務MNS本身具備高可靠和高可用的特點,所以只要網(wǎng)絡恢復正常,事務就可以繼續(xù)進行。只要生產者操作成功,消費者就能收到消息并成功處理;如果生產者操作失敗,則消費者無法收到消息。
心靈雞湯:
標題:阿里云國際代理商,阿里云賬號24h自助充值
地址:http://www.busanamuslimtrendy.com/kfxw/64311.html