【アウトボックスパターン】
Outboxパターン とは?
最終更新:
💡 業務データと送信予定を、一緒に保存
業務データと送信予定のイベントを同じDBトランザクションで保存し、別の処理が配信する設計。二重書き込みの問題、再試行、重複処理や順序への対策を解説します。
📌 このページのポイント
注文の保存と通知が、食い違うことがある?
Outboxでは、どうする?
注文データと送信予定のイベントを、同じDBトランザクションで保存するよ。両方を確定するか、両方を取り消す。そのあと別の配信処理が、確定した送信予定をメッセージブローカーなどへ送るんだ。
保存できた瞬間に、相手へ届く?
配信に失敗したら?
記録されたイベントを元に再試行できるようにするよ。ただ、送信は成功したのに配信済みの記録に失敗すると、もう一度送る可能性がある。受信側もイベントIDなどで重複を識別し、同じ注文を二重に処理しない設計が必要なんだ。
専用の製品が必要?
もっと詳しく知りたい人へ
Outboxなら、必ず一度だけ届く?
このパターンだけでは、一度だけの配送や処理は保証しません。再試行で重複する場合に備え、受信側の冪等性や重複判定、配信済みの管理を設計します。失敗が続くイベントの監視と対応も必要です。
イベントの順番も、自動的に保たれる?
保存順と配信・処理の順序をどう保つかは、別に設計します。並列処理、再試行、配信先の仕様も関係します。たとえばDebeziumの説明では、集約IDをKafkaのメッセージキーに用い、パーティション内の順序に関係付けています。
まとめ:ざっくりこれだけ覚えればOK!
「Outboxパターン」って出てきたら「業務データと送信予定を一緒に保存し、あとでイベントを配信する仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「Transactional Outbox Pattern」 = トランザクションで送信予定を保存する設計
💬 Outboxは送信トレイです。業務データの更新と、送りたいイベントの記録を一つのトランザクションにまとめます。