【アウトボックスパターン】

Outboxパターン とは?

💡 送り忘れゼロ!DBに下書き保存してから確実にお届けするイベント配達術
📌 このページのポイント
Outboxパターン アプリケーション 書き込み処理 TX データベース ビジネステーブル Outboxテーブル { 同一トランザクション } CDC / ポーリング 変更を検知 メッセージブローカー Kafka / RabbitMQ 他のサービス イベント受信 ① 同一TXで書き込み → ② CDC/ポーリングで検知 → ③ ブローカーへ配信 → ④ 他サービスが受信
Outboxパターンのイメージ
ひよこ ひよこ

Outboxパターンって何?イベントを送るだけなのに、なんでわざわざDBに保存するの?

ペンギン先生 ペンギン先生

いい質問だね。たとえば「注文を保存する」と「注文イベントを送る」を同時にやりたいとき、片方だけ成功してもう片方が失敗すると困るよね。Outboxパターンは、注文データと一緒にイベントも同じDBトランザクションで保存して、あとから別プロセスが配信するんだよ

ひよこ ひよこ

じゃあイベントをDBに書くだけで、送信は別の人がやってくれるってこと?

ペンギン先生 ペンギン先生

そのとおり!ポーリングで定期的にOutboxテーブルをチェックする方法と、CDC(Change Data Capture)でDBの変更をリアルタイムにキャッチする方法があるよ。CDCのほうが遅延が少なくて人気だね

ひよこ ひよこ

もしイベントの配信が失敗したらどうなるの?

ペンギン先生 ペンギン先生

Outboxテーブルレコードが残っているから、リトライできるんだ。配信済みのレコードにはフラグを立てるか削除する。だから「送り漏れ」がなくなるのが最大のメリットだよ

ひよこ ひよこ

実際にはどんなツールで実装するの?

ペンギン先生 ペンギン先生

DebeziumというCDCツールとKafkaを組み合わせるのが定番だね。Debeziumがデータベースの変更ログを監視して、Outboxテーブルへの書き込みを検知したらKafkaにイベントを流してくれるんだ。アプリケーション側はDBに書くだけでいいから、とてもシンプルになるよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Outboxパターン」って出てきたら「DBに下書き保存してから確実にイベントを届ける仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「Transactional Outbox Pattern」 = トランザクション送信箱パターン
💬 Outboxは「送信トレイ」のこと。メールの送信箱と同じで、送りたいメッセージを一旦ためておく場所だよ
← 用語集にもどる