ホームページ >バックエンド開発 >PHPチュートリアル >Symfony Messenger モニタリングの紹介
Symfony Messenger と Inspector バンドルで Symfony アプリケーションのスケーラビリティを強化
Symfony 開発者として、アプリケーションのパフォーマンスとスケーラビリティを最適化することが最重要です。 Symfony Messenger コンポーネントは、非同期タスク処理のための強力なソリューションを提供しますが、これらのバックグラウンド操作を監視するのは困難な場合があります。 この記事では、Symfony Messenger のバックグラウンド ジョブを包括的に可視化し、手動のログ分析やカスタム監視コードの必要性を排除する Inspector バンドルの新機能を紹介します。
この新しい機能により、バックグラウンド タスクのあらゆる側面を自動的に監視できます。 実行時間やメモリ消費量からデータベース クエリ、エラー、潜在的なボトルネックに至るまで、ユーザーフレンドリーなダッシュボードを通じて即座に洞察を得ることができます。すべて構成は必要ありません。
開発者の典型的な課題は依然として残っています。それは、非同期メッセージ処理を展開し、スムーズなバックグラウンド操作を期待することです。 Symfony Messenger は堅牢ですが、バックグラウンド プロセスの監視は歴史的に盲点でした。 この記事では、実装の詳細を掘り下げて、日々の開発における大きなメリットを明らかにします。
キュー システムは、現代の Web アプリケーションにおける重要な要素であり、時間のかかるタスクをメインの要求/応答サイクルから分離できるようになります。ユーザーのリクエスト中にリソースを大量に消費する操作 (電子メールの送信、画像処理、レポートの生成など) を処理する代わりに、これらのタスクはバックグラウンド ワーカーによる非同期処理のためにキューに入れられます。 これにより、ユーザーが長時間の操作を待たなくなるため、アプリケーションの応答性が向上し、同時タスク処理を制御することでリソース管理が強化されます。 キュー システムには、タスクが失敗した場合の信頼性を高めるために、再試行メカニズムが組み込まれていることがよくあります。 アプリケーションが拡大するにつれて、インフラストラクチャのコストを増大させることなくより多くのユーザーにサービスを提供するには、このアプローチの採用が不可欠になります。
Symfony Messenger コンポーネントは、Symfony フレームワーク内に組み込まれた強力なキュー システムです。これにより、さまざまなキュー プロバイダー (AMQP、Redis、Doctrine) からのメッセージのパブリッシュと消費が容易になります。メッセージは、タスクを表すデータを含む単純なクラスです。
メッセージの例は次のとおりです:
<code class="language-php">namespace App\Messenger; class SmsNotification { public function __construct(private string $content) {} public function getContent(): string { return $this->content; } }</code>
キューからメッセージが取得されると、対応するハンドラーがメッセージを処理します:
<code class="language-php">namespace App\Messenger; class SmsNotification { public function __construct(private string $content) {} public function getContent(): string { return $this->content; } }</code>
#[AsMessageHandler]
メソッドの SmsNotification
属性と __invoke
の型ヒントに注意してください。 これらは、Symfony が特定のメッセージのハンドラーを識別する方法です。 messenger:consume
コマンドは、バックグラウンド ワーカーを実行してキューに入れられたメッセージを処理し、要求と応答のサイクルの外で適切なハンドラーを実行します。 メッセージを非同期にディスパッチするには:
<code class="language-php">namespace App\Messenger; use Symfony\Component\Messenger\Attribute\AsMessageHandler; #[AsMessageHandler] class SmsNotificationHandler { public function __invoke(SmsNotification $message) { // ... send SMS message ... } }</code>
メッセンジャーは、自動メッセージ シリアル化、ミドルウェア サポート、再試行戦略などの機能により、複雑な非同期処理を簡素化します。
ユーザーや開発者の視点を超えて動作するバックグラウンド プロセスの監視には、特有の課題が伴います。 ハンドラーにはどれくらいの時間がかかりますか?という疑問が生じます。 コストのかかるデータベース操作が実行されていますか? バックグラウンドジョブはサイレントに失敗していますか?
Inspector は、メイン アプリケーションと同じ効率でバックグラウンド プロセスを監視するための使いやすいインターフェイスを提供することで、これらの問題に対処します。
Inspector パッケージは、メッセージ処理の開始と終了を追跡するメッセンジャー ミドルウェアを登録します。メッセージ処理中にデータベース クエリやその他のアクションを収集するための既存の機能を利用します。 Symfony Messenger のミドルウェアはメッセージ処理のラッパーとして機能し、処理の前後にアクションを実行できます。 これには、責任連鎖設計パターンが利用されています。
ミドルウェアはメッセージ処理の前後にコードを実行するように実装されています:
<code class="language-php">namespace App\Controller; use App\Messenger\SmsNotification; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Messenger\MessageBusInterface; use Symfony\Component\Routing\Attribute\Route; class HomeController extends AbstractController { #[Route('/', name: 'home')] public function home(MessageBusInterface $bus) { $bus->dispatch(new SmsNotification("New Message!")); return new Response('SMS notification dispatched.'); } }</code>
このプラグアンドプレイ コンポーネントは、アプリケーションの依存関係を更新する際のバックグラウンド プロセスの監視を簡素化します。
バージョン 1.5 はマイナー リリースであり、composer update
経由で簡単にインストールできます。 Messenger Monitoring は、コードを変更することなく自動的に統合されます。
ノイズを減らすために、Inspector では ignore_messages
:inspector.yaml
の
<code class="language-php">namespace App\Messenger\Middlewares; use Symfony\Component\Messenger\Middleware\MiddlewareInterface; use Symfony\Component\Messenger\Middleware\StackInterface; class MessengerMonitoringMiddleware implements MiddlewareInterface { public function handle(Envelope $envelope, StackInterface $stack): Envelope { // Before handling $this->beforeHandle($envelope); // Handle the message $envelope = $stack->next()->handle($envelope, $stack); // After handling $this->afterHandle($envelope); } }</code>
Inspector は、無料の HTTP モニタリング、データベース クエリの洞察、アラート転送を提供します。 Symfony パッケージをインストールするだけで開始できます。 詳細については、https://www.php.cn/link/3a78f1864ab77dbd239fbe33cae90bbb
をご覧ください。以上がSymfony Messenger モニタリングの紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。