1. 程式人生 > >支付寶回撥通知怎麼處理才能保證結果不丟失

支付寶回撥通知怎麼處理才能保證結果不丟失

問題背景

   現在的應用系統功能越來越多,複雜度也相應增大,而線上商城大都是分散式環境的,在商城系統中怎麼保證支付寶的非同步通知一定會被正確處理。

解決方案

大家都知道
* public static String notify_url =*
這是支付寶的非同步通知,當買家付完款後,支付寶會向這個地址傳送post請求,其帶了N多引數,然後驗證簽名是否正確,簽名通過返回success,簽名不通過返回false。我們處理訂單的邏輯就是寫在這個位置的。
在這個方法裡,不建議做太多的與資料庫相關的操作,因為每個買家付完款款後,都會呼叫這個介面,所以只將訊息存在可靠訊息服務裡,並立馬返回支付寶,注意這個介面要做成冪等操作,防止網路故障,沒有給支付寶響應,支付寶就會一直調這個介面。

下圖就是可靠訊息實現方案

這裡寫圖片描述

備註:
可靠訊息主要是用來保證訊息不丟失的。
①主動方傳送預確認訊息
②將訊息儲存在資料庫中,狀態為待確認
③返回訊息儲存的結果
④根據返回的結果判斷事都執行業務方法,業務方法完成後傳送確認訊息
⑤獨立訊息服務將訊息扔到訊息佇列(MQ)中
⑥被動方應用監聽佇列取出訊息消費

訊息一致性異常處理 :定時的從可靠訊息服務中取出訊息狀態是待確認的,超過一定時間沒被確認,呼叫主動方應用提供的查詢業務方法結果的介面,根據結果對該訊息進行操作,刪除或者更改狀態為傳送中,並扔到MQ中。
訊息消費異常處理:定時的從可靠訊息服務中取出訊息狀態是傳送中的,超過一定時間還沒有被確認消費的,將該訊息扔到MQ中。
死亡訊息處理

:如果訊息多次扔到MQ當中,還是未成功訊息,就要將該訊息置為已死亡,有可靠訊息的管理頁面處理