symfony-messenger について
Symfony Messengerでの非同期メッセージ処理、トランスポートのルーティング、ワーカー運用を扱う開発スキルです。再配信への安全性、リトライ、設定確認を重視します。
主な機能
- 01メッセージとハンドラーの設計
- 02トランスポートの選択とルーティング
- 03リトライと失敗時トランスポートの設定
- 04ワーカー運用と制限
- 05設定確認とテスト
活用シーン
- 01時間のかかる処理をリクエストから分離
- 02メッセージを非同期トランスポートへルーティング
- 03再配信に安全なハンドラーの作成
- 04ワーカーとトランスポートの設定確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ dev-toolings/ superpowers-symfony --skill symfony-messengerインストール後、Claude Code で/symfony-messengerを入力して読み込まれたか確認します。
同梱ファイルreference.md
詳細
Symfony Messenger(Symfony)
使用する場面
- 時間がかかる処理や失敗しやすい処理を、リクエストから切り離してメッセージにし、
#[AsMessageHandler]ハンドラーで処理する場合。 - トランスポート(Doctrine、Redis、AMQP、
sync://、in-memory://)を選択し、メッセージを振り分ける場合。 messenger:consumeでワーカーを実行、調整、再起動する場合。- 再配信されても安全にハンドラーを実行できるようにする場合。
デフォルトのワークフロー
- IDを保持し、エンティティを含まないプレーンな
readonlyクラスとしてメッセージを作成します。 #[AsMessageHandler]と型指定された__invoke()を使用してハンドラーを記述します。IDで再取得し、すでに完了した処理はスキップします。#[AsMessage('async')]またはroutingキーでメッセージをルーティングし、messenger.yamlでトランスポートのDSNを宣言します。- トランスポートに
retry_strategyとfailure_transportを設定します。 messenger:consume async -vvでメッセージを処理します。--limit、--memory-limit、または--time-limitで上限を設定します。debug:messengerとmessenger:statsで設定を確認し、テストではin-memory://を使用します。
ガードレール
- Doctrineエンティティではなく、エンティティのIDを渡します。プロキシやデタッチされた状態は適切にシリアライズされません。
- 配信は少なくとも1回行われます。再配信されたメッセージは例外を投げず、何もせずに終了する必要があります。
- 参考資料では
PriorityStamp、--fetch-size、--no-reset、stop_worker_on_signalsは8.1以降とされています。まず最低バージョンを確認してください。 - デプロイ時には
messenger:stop-workersでワーカーを再起動します。
段階的な情報開示
- 実行方法とリスク管理にはこのファイルを使用します。
- 実装の詳細が必要な場合は、リファレンスを開きます。
出力要件
- メッセージ、ハンドラー、ルーティングおよびトランスポートの設定。
- リトライと失敗時のトランスポート設定。
- ワーカーのコマンド、および設定を証明する
debug:messengerまたはmessenger:statsの出力。
参考資料
reference.md
コメント
Markdown 対応