メッセージキュー:メッセージがキューに入るときにイベントをトリガーできますか?
-
27-09-2019 - |
質問
職場では、PHPアプリケーションにメッセージキューを実装するかどうかについて議論しています。現在、ApacheのActiveMQを検討しています。私たちが完全に明らかにしていないことの1つは、キューに到着するメッセージに基づいてプロセスをトリガーすることが可能かどうかです。
これまでに発見した文献は、メッセージキューがプルベースのメカニズムであることを示しているようです。プロセスは定期的に実行され(デーモンまたはクロンとして)、キューから着信メッセージを引っ張ります。これをプッシュメカニズムに変えることは可能ですか?つまり、メッセージが届いたときにメッセージキューに実際にHTTPリクエスト(またはプロセス)を開始する方法はありますか?私たちが見つけたオプションの1つは、パブリッシュ/サブスクライブモデルですが、これにはPHPアプリを無限のループで実行して、ActiveMQインスタンスへのオープン(TCP)接続を維持する必要があります。
どんな入力も大歓迎です。
解決
明らかな解決策は、出版社にメッセージを保存した直後にHTTP要求を開始できるようにすることですが、これは疑問を招きます。なぜメッセージキューを使用しているのですか?
一連の消費者がキューに耳を傾け、メッセージが来るときに仕事をすることはクラッジではありません。それは良い、スケーラブルなデザインです。 (私は、無限のループでPHPプロセスを実行することには短所があることに同意します。)
たとえば、メッセージを保存するデータベースとは対照的に、メッセージキューを選択したのはなぜですか? 「プロデューサー」は、メッセージを列としてテーブルに保存し、メッセージのPKで「消費者」をトリガーできます。
他のヒント
キュー(JMSコンポーネント)からメッセージを引き出し、HTTPエンドポイント(HTTPコンポーネント)に転送するラクダルートを作成することを検討してください。 ActiveMQブローカープロセスでCamel Routeをホストすることを決定することもできます。 ActiveMQは、ActiveMQ分布のCamelコアライブラリをバンドルすることで、これを簡単にします。
これは、最近の関連 /関連する投稿です。
キューを監視するアプリの設計コンセプトは、外部アプリケーションを実行する業界の方法です。 IBM WebSphere「トリガーモニターアプリケーション」をご覧ください。実装では、複数のトリガーモニターを使用して、キュー内のメッセージを処理するアプリを起動することができます。そのため、アプリがインストールされているサーバーでトリガーモニターが実行されると、スケーラビリティのために設計する場合は非常によくスケーリングできます。必要に応じて、いくつかのアプリサーバーがあります)。