簽署有效與工作已做過,是兩個問題
Stripe 的簽署包含時間戳記,用來限制重放攻擊,但不能代替重複事件核對。正常重送可能有新的傳送簽署,事件本身卻已處理。以下是自行設計的本地記錄。
| 傳送情況 | 核實 | 事件紀錄 | 操作 |
|---|---|---|---|
| EV-21,新簽署請求 | 通過 | 未有紀錄 | 先取得處理權才執行 |
| EV-21,正常重送 | 通過 | 已完成 | 確認收件,不重做業務操作 |
| 擷取的舊請求 | 超出已設定且受支援的時間容許範圍 | 任何狀態 | 按驗證失敗處理 |
兩個接收程序不能同時取得處理權
同一範圍的事件編號只可有一個處理權。收件、處理中及完成要分開。工作程序若在外部操作後停下,先核對結果才解除處理權;直接刪除事件紀錄可能令操作重做。
兩個程序同時收到同一有效事件,只查「未有紀錄」是否足夠?
查看參考答案
不足夠,兩邊都可能查到沒有紀錄。須用唯一限制或交易取得處理權,另一邊按既有狀態處理;測試只產生一次業務結果。