HTTP 経路と worker 経路で共有する service は worker 側でトランザクション境界が消える
アーキテクチャ
トランザクション
非同期処理
信頼性
知識
原則
同一の service メソッド(例: bulkUpdateItem)を HTTP 経路と非同期 worker 経路の両方から呼ぶとき、トランザクション境界の有無が経路で非対称になりやすい。HTTP 経路は Controller に付いた TransactionInterceptor 等のフレームワーク機構で原子的に包まれるが、worker 経路(SQS 受信 → processor → service)にはその機構が効かず、非トランザクションのまま複数の DB 書き込みが走る。
結果、途中失敗で partial write が残り、さらに task=FAILED にしてキューメッセージを即削除すると再実行もできず不整合が残留する。
worker 経路では DB 書き込み部分を明示的にトランザクション(executeInTransaction 等)で包み、commit 後に冪等な後処理(検索インデックス反映・集計・履歴記録)を回す設計へ寄せる。interceptor / middleware 由来の暗黙のトランザクションは別の呼び出し経路には効かない、という一般則として持つ。