現状の課題
「メッセージ送信の信頼性」の(1)直接ディスパッチ方式において、プロデューサー側のDBコミットが完了する前に、コンシューマー側がメッセージを受信して処理を開始してしまい、対象データの取得(SELECT)が空振りするケースについての考慮が不足しています。 AWS(SQS/Kinesis)環境では通信レイテンシにより顕在化しにくいものの、ローカル環境や低遅延なネットワークでは発生頻度が高まる可能性があります。
対応方針
- コンシューマー側でのリトライ
- 処理対象データが0件だった場合、即時エラー(データ不整合)とせず、DBコミット待ちを想定して一定回数リトライを行う実装を検討する。
- 遅延キュー(Delay Queue)の活用
- プロデューサー側で意図的にメッセージの可視化を遅らせる(SQS遅延キュー等で数秒〜数分のDelayを設定する)ことで、DBコミット完了までの猶予時間を確保する。