阿里云國際站經(jīng)銷商,主營阿里云,騰訊云,華為云,亞馬遜aws,谷歌云gcp,微軟云az,免費開戶,代充值優(yōu)惠大,聯(lián)系客服飛機@jkkddd


事務(wù)消息

本文介紹如何使用消息服務(wù)MNS的延時消息功能,實現(xiàn)本地操作和消息發(fā)送的事務(wù)一致性。
前提條件
您已創(chuàng)建以下隊列,具體操作,請參見創(chuàng)建隊列。
事務(wù)消息隊列
消息存活時間小于消息延時時間。
當消息發(fā)送成功、事務(wù)操作成功時,生產(chǎn)者修改消息延遲時間,消息對消費者可見。
當消息發(fā)送成功、事務(wù)操作失敗時,生產(chǎn)者不修改消息延遲時間,消息對消費者不可見。
操作日志隊列
記錄事務(wù)消息的操作記錄信息。消息延時時間為事務(wù)消息操作超時時間。日志隊列中的消息確認后將對消費者不可見。
原理介紹
一些業(yè)務(wù)場景需要保證本地操作和消息發(fā)送的事務(wù)一致性,即消息發(fā)送成功,本地操作成功。如果消息發(fā)送成功,本地操作失敗,那么發(fā)送成功的消息需要回滾。
消息發(fā)送成功,事務(wù)操作成功時操作步驟如下所示:
生產(chǎn)者發(fā)送一條事務(wù)準備消息到事務(wù)消息隊列。
生產(chǎn)者發(fā)送操作日志消息到操作日志隊列,日志中包含步驟1消息的消息句柄。
生產(chǎn)者執(zhí)行本地事務(wù)操作成功。
生產(chǎn)者請求修改消息延遲時間,使消息對消費者可見。
生產(chǎn)者向操作日志隊列確認操作日志,刪除日志消息。
消費者從事務(wù)消息隊列中接收事務(wù)消息。
消費者處理事務(wù)消息。
消費者請求刪除事務(wù)消息。
消息發(fā)送成功,事務(wù)操作失敗時操作步驟如下所示:
生產(chǎn)者發(fā)送一條事務(wù)準備消息到事務(wù)消息隊列。
生產(chǎn)者發(fā)送操作日志信息到操作日志隊列,日志中包含步驟1消息的消息句柄。
生產(chǎn)者執(zhí)行本地事務(wù)操作失敗。
操作日志隊列向生產(chǎn)者發(fā)送消息,請求讀取超時未確認操作日志。
生產(chǎn)者檢查事務(wù)結(jié)果,發(fā)現(xiàn)操作失敗。
生產(chǎn)者提交回滾消息請求,不修改消息延遲時間,消息對消費者不可見。
生產(chǎn)者向操作日志隊列確認操作日志,刪除日志消息。
示例代碼
消息服務(wù)MNS最新的Java SDK(1.1.8)中的TransactionQueue支持上述事務(wù)消息方案。在TransactionOperations和TransactionChecker兩個接口添加業(yè)務(wù)操作和檢查邏輯,您就可以方便地實現(xiàn)事務(wù)消息
異常分析
生產(chǎn)者異常(例如進程重啟)
讀取操作日志隊列中超時未確認日志。
檢查事務(wù)結(jié)果。
如果檢查到事務(wù)執(zhí)行成功,則提交消息。
確認操作日志。
消費者異常(例如進程重啟)
消息服務(wù)MNS提供至少保證消費一次的特性,如果當前消費者沒有成功消費并刪除消息,消息在不可見時間后將繼續(xù)可見,被當前消費者或者其他消費者處理。
消息服務(wù)MNS服務(wù)不可達(例如斷網(wǎng))
消息發(fā)送和接收處理狀態(tài)及操作日志都在消息服務(wù)MNS服務(wù)端,消息服務(wù)MNS本身具備高可靠和高可用的特點,所以只要網(wǎng)絡(luò)恢復(fù)正常,事務(wù)就可以繼續(xù)進行。只要生產(chǎn)者操作成功,消費者就能收到消息并成功處理;如果生產(chǎn)者操作失敗,則消費者無法收到消息。

心靈雞湯:

標題:阿里云國際代理商,阿里云賬號24h自助充值

地址:http://www.nickbaillie.com/kfxw/64311.html