在介紹方案以前,我帶着你們回顧一下以前我簡化完的支付系統,以及支付系統中出現的分佈式事務的問題。網絡
在3rd-access成功更新訂單,可是通知商戶由於網絡或者商戶服務宕機的緣由,沒有通知成功step6,這時候會帶來訂單數據的丟失,致使商戶那邊明明釦了錢,可是得不到不到權益,下面咱們就針對這種狀況,一塊兒探討下解決方案。架構
爲了更好的探討這個問題,咱們將系統的其餘服務暫時先拋棄,針對step6進行一個分析。如圖分佈式
針對step6,一般咱們會用一個http請求的方式去通知商戶。可是http是無狀態協議,通知一次失敗了就失敗了,因此咱們在想是否可以作成重複通知的狀況,若是沒有通知就每隔多少時間再通知一次。可是又不是無限的通知下去,一次又一個最大的通知次數。可是,若是這個數據很重要,在到達最大通知次數以後咱們再也不通知了,可是商戶如今又修復好了服務,讓我從新通知一次,那咱們又該如何處理那,下面來看改造以後的方案。如圖:.net
紅線部分是老的通知方案,其餘最大努力通知的方案。blog
這樣保證了正向流程的消息一致性。事務
那麼針對異常流程,是否會形成消息的丟失呢?咱們來看下狀況支付寶
具體的方案協議細節以下圖:高可用
/**
* ————————若是以爲本博文還行,別忘了推薦一下哦,謝謝!
* 做者:寫程序的奧特曼
* 歡迎轉載,請保留此段聲明。
* 出處:https://my.oschina.net/u/2286631/blog/1505151
*/ 請求