終端状態のキューメッセージもcleanupが未完了ならworkerへ渡す
キュー設計
非同期処理
信頼性
判断
運用
キューワーカーで処理対象の状態が COMPLETED / FAILED などの終端状態になっていても、関連する排他ロック、lease、外部リソース解放などの cleanup が別操作なら、message を helper / parser 側で即削除してはいけない。task は終端でも cleanup は未完了の可能性があるため、terminal message は cleanup recovery の入口として worker に渡す。
判断基準
- 状態更新と cleanup が別操作で、cleanup 失敗時に message を残す設計なら、terminal status も worker に渡す。
- worker は terminal message を受けたら、通常処理や user / role の再構築より前に cleanup を実行し、cleanup 成功後にだけ message を削除する。
- cleanup 失敗時は message を削除しない。再配信で同じ cleanup を再試行できるようにする。
- helper / parser 側で削除してよいのは、対象が存在しない、payload が壊れているなど、再配信しても cleanup できない message に限定する。
失敗症状
処理本体が完了して task が terminal になった後、lock 解放だけが一時障害で失敗する。その後、再配信された terminal message を parser が「処理不要」と判断して削除すると、cleanup の再実行機会が消え、lock や lease が残り続ける。
検証
terminal status の message を受信したケースで、worker が cleanup を実行してから message を削除することを確認する。cleanup を意図的に失敗させたケースでは、message delete が呼ばれず、再配信で cleanup retry できることを確認する。