mcpField
S
symfony-messenger

symfony-messenger

github.com/dev-toolings開発22793 回インストール3 週間前に更新
リポジトリ

symfony-messenger について

Symfony Messengerでの非同期メッセージ処理、トランスポートのルーティング、ワーカー運用を扱う開発スキルです。再配信への安全性、リトライ、設定確認を重視します。

主な機能

  1. 01メッセージとハンドラーの設計
  2. 02トランスポートの選択とルーティング
  3. 03リトライと失敗時トランスポートの設定
  4. 04ワーカー運用と制限
  5. 05設定確認とテスト

活用シーン

  1. 01時間のかかる処理をリクエストから分離
  2. 02メッセージを非同期トランスポートへルーティング
  3. 03再配信に安全なハンドラーの作成
  4. 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 でワーカーを実行、調整、再起動する場合。
  • 再配信されても安全にハンドラーを実行できるようにする場合。

デフォルトのワークフロー

  1. IDを保持し、エンティティを含まないプレーンな readonly クラスとしてメッセージを作成します。
  2. #[AsMessageHandler] と型指定された __invoke() を使用してハンドラーを記述します。IDで再取得し、すでに完了した処理はスキップします。
  3. #[AsMessage('async')] または routing キーでメッセージをルーティングし、messenger.yaml でトランスポートのDSNを宣言します。
  4. トランスポートに retry_strategy と failure_transport を設定します。
  5. messenger:consume async -vv でメッセージを処理します。--limit、--memory-limit、または --time-limit で上限を設定します。
  6. 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

コメント