Skip to content

非同期: メッセージ送信におけるDBコミット追い越し(Race Condition)への対策を追記する #281

@ma91n

Description

@ma91n

現状の課題

「メッセージ送信の信頼性」の(1)直接ディスパッチ方式において、プロデューサー側のDBコミットが完了する前に、コンシューマー側がメッセージを受信して処理を開始してしまい、対象データの取得(SELECT)が空振りするケースについての考慮が不足しています。 AWS(SQS/Kinesis)環境では通信レイテンシにより顕在化しにくいものの、ローカル環境や低遅延なネットワークでは発生頻度が高まる可能性があります。

対応方針

  • コンシューマー側でのリトライ
    • 処理対象データが0件だった場合、即時エラー(データ不整合)とせず、DBコミット待ちを想定して一定回数リトライを行う実装を検討する。
  • 遅延キュー(Delay Queue)の活用
    • プロデューサー側で意図的にメッセージの可視化を遅らせる(SQS遅延キュー等で数秒〜数分のDelayを設定する)ことで、DBコミット完了までの猶予時間を確保する。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions