messenger-retry-failures について
Symfony 開発向けのスキルです。Messenger の失敗に対し、再試行の判断やトランスポート設定から失敗メッセージの調査まで扱います。冪等なハンドラーと最終失敗時の通知についても説明します。
主な機能
- 01一時的な失敗と恒久的な失敗の分類
- 02トランスポートごとの再試行設定
- 03失敗を専用キューに送る
- 04ハンドラーの冪等性を確保
- 05失敗メッセージの確認、再試行、削除
- 06最終失敗時の通知
活用シーン
- 01失敗するハンドラーの再試行動作を設定
- 02失敗トランスポート内のメッセージを調査
- 03メッセージが再試行されない場合に通知
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ dev-toolings/ superpowers-symfony --skill messenger-retry-failuresインストール後、Claude Code で/messenger-retry-failuresを入力して読み込まれたか確認します。
同梱ファイルreference.md
詳細
Messenger の再試行失敗(Symfony)
使用する場面
- ハンドラーが失敗し、再試行するか諦めるかを判断する必要がある場合。
- トランスポートの
retry_strategy(max_retries、delay、multiplier、max_delay)を調整する場合。 - 失敗トランスポート内のメッセージを調査、再試行、または削除する場合。
- メッセージが最終的に失敗したときにアラートを送る場合。
デフォルトのワークフロー
- 各失敗を分類します。再試行しても解決できない場合は
UnrecoverableMessageHandlingException、原因が一時的な場合はRecoverableMessageHandlingExceptionを使用します。 - トランスポートごとに
retry_strategyを設定し、failure_transportを専用キューに指定します。 - 組み込みのバックオフでは不十分な場合に限り、
RetryStrategyInterfaceを実装し、retry_strategy.serviceを通じて登録します。 - ハンドラーを冪等にし、外部呼び出しには安定した冪等性キーを使用します。
messenger:failed:showでトリアージし、その後messenger:failed:retryまたはmessenger:failed:removeを実行します。WorkerMessageFailedEventをサブスクライブし、willRetry()が false の場合にのみアラートを送ります。
ガードレール
- 無効な入力や拒否されたカードなど、成功する可能性がない処理は再試行しないでください。
- 失敗しているサービスに過剰な負荷をかけないよう、指数バックオフを設定し、
max_retriesは控えめな値(通常は 3~5)にしてください。 - リファレンスでは、回復可能例外の
retryDelayとforceRetryは 8.1+ と記載されており、forceRetry: trueはmax_retriesを超えて再試行します。使用する前にバージョンを確認してください。 messenger:failed:retryは--forceを指定しない限り対話式です。まず-vvを付けてメッセージを確認してください。
段階的な情報開示
- 実行時の基本方針とリスク管理には、このファイルを使用します。
- 詳細な実装情報が必要な場合は、リファレンスを参照してください。
出力要件
- ハンドラーの各失敗モードで選択する例外クラス。
- トランスポートごとの再試行設定と失敗トランスポート。
- 失敗メッセージの運用手順(表示、再試行、削除)と最終失敗時のアラート。
リファレンス
reference.md
コメント
Markdown 対応