IOSOR ガイド

重複したWebhookで2重のデビットが発生してはならない

障害パス: 再試行とリプレイはプリペイド残高と受信トレイでべき等性を維持します — 1つのイベントID、1つのデビット行、1つの受信トレイ行。

At-least-once配信では再試行が行われます。2回目のデビットや2回目の受信トレイ行を送信する重複Webhookは、「無害なACK」ではなく、お金と運用のインシデントです。このページは障害パスです。再試行とリプレイは、API送信のべき等性のエッセイやインバウンドSMSの再試行プレイブックではなく、プリペイドマネーと受信トレイにおいてべき等性を保ちます。

関連: 署名およびリプレイ窓ゲート, 初回送信前のWebhook契約, 同一台帳のデビット行と配信ステータス。

IOSORはホワイトラベルのプリペイドです。20米ドルで1人の消費者に対する重複イベントのースモークテストを資金調達し、月額約1,000米ドル近辺のソフトレビューでは「再試行=新しい課金」を消込負債として価格設定します。クライアントにはホワイトラベルのイベントIDのみが表示されます。

べき等性はスローガンではなく障害パスである

ハッピーパス: 1つの署名付きイベント、1つの受付、1つのデビット。障害パスは信頼を燃やします — タイムアウト、5xx、プロバイダのリプレイ、オペレータの再プッシュ。副作用(台帳、受信トレイ、CRM)の前に初回送信前のWebhook契約からべき等性キーを保存します。ソフトな月額1,000米ドルでは「ACKの後に新しいキーを発明する」ことをボリューム負債として扱いますが、20米ドルは強制リプレイが決してお金を倍増させないことを証明します。

重複とみなされるもの

シグナル 重複とみなす条件 安全な結果
イベントID ウィンドウ内ですでに受理された同じID ACK; 2回目のデビットなし
メッセージID 台帳にすでにリンクされている同じメッセージ 行を再利用; 新規課金なし
受信キー すでにファイリング済みの同じMO/MT 2回目の受信行なし
ウィンドウ外 ゲート拒否後の古い再試行 拒否; 金額/ステータスの書き込みなし
不明なタイプ 契約イベントリストにない 破棄; 成功の捏造なし

署名およびリプレイ窓ゲートが信頼性と新しさを決定します。このページは、有効な重複の後に何が起こるかを所有します:1つの終了状態、1つの金銭行、1つの受信行。

お金が2回動いてはならない

同じイベントIDに対する2回目のデビットは、プロダクトが「まだ配信済みと表示して」いてもバグです。財務部門はイベントまたはメッセージIDでフィルタリングし、そのUTCウィンドウに対して1つのプリペイド行を確認します。ACK後の部分的な副作用(最初にCRM、後から台帳)は二重の真実を作り出します。永続化後に処理が失敗した場合は、同じキーでワーカーを再試行し、HTTPボディを新しい課金として再受理しないでください。重複スモークが1つの台帳行を示すまで、ソフトボリューム言語はブロックされたままになります。

受信トレイも二重になってはならない

べき等性はお金だけではありません。2番目の受信スレッドを開くリプレイされたインバウンドまたは配信イベントは、サポートに幽霊を追わせ、自動返信ループを引き起こす可能性があります。デビットに使用されたものと同じイベントIDで受信トレイキーを保存します。プロダクトと財務は拒否/重複の用語を共有しています: プロダクトと財務のための共通ステータス言語。20米ドルは、1回の強制リプレイによって受信トレイのカーディナリティが変化しないことを証明します。

重複セーフなWebhookのためのバイヤーチェックリスト

  1. べき等性キーの形状が契約で合意され、副作用の前に保存されているか?
  2. ウィンドウ内の重複イベントID → 2回目のデビットなしでACK?
  3. 同じメッセージIDが2番目のプリペイド台帳行を開くことがないか?
  4. 受信トレイの挿入が同じ方法でキー設定されているか — リプレイ時に2番目のスレッドがないか?
  5. 署名失敗とウィンドウ拒否が実際の重複とは別にカウント可能か?
  6. 重複スモークが赤の間、ソフトな月額1,000米ドルの話し合いがブロックされているか?

「いいえ」が1つでもあると、重複セーフなWebhookのお金 — そして信頼できる受信トレイ — はドラフトのままになります。

IOSORから始める

すでに課金済みの経路で、窓の内側に署名付き webhook を一度だけ再送する。イベント id と ledger id を並べて出し、デビット行は一行、受信行は一行だと示す。二行目のデビットが出たらその消費者を止め、余分な行を返す。後のトラフィックで相殺するな。これは再送の金の門であり、E.164 の文法検査でも配送文面でもない。

IOSORの要点

再送は新しい送信ではない。一つのイベント id が書くデビットは一回。

やる:署名と再送窓を入れたまま、窓内の POST のあとデビットが一行だと示す。やるな:POST ごとにデビットすること。回線の再試行を二枚目の請求にすること。

このガイドは役に立ちましたか?

関連ガイド