2010-11-23 16 views
1

私たちはPHPアプリケーション用のメッセージキューを実装するかどうかについて検討しています。現在、私たちはApacheのActiveMQを見ています。私たちが完全にはっきりしていないことの1つは、キューに到着したメッセージに基づいてプロセスをトリガできるかどうかということです。メッセージキュー:メッセージがキューに入ったときにイベントをトリガできますか?

メッセージキューはプルベースのメカニズムであることがわかりました。プロセスは定期的に(デーモンまたはcronとして)実行され、受信メッセージをキューからプルします。これをプッシュメカニズムに変えることは可能ですか?つまり、メッセージが到着したときにメッセージキューが実際にHTTPリクエスト(またはプロセス)を開始する方法がありますか?私たちが見つけた1つの選択肢はPublish/Subscribeモデルですが、これは無限ループでPHPアプリケーションを実行して、ActiveMQインスタンスへのオープン(TCP)接続を維持する必要があります。

入力があれば幸いです。

答えて

1

明白な解決策は、適切なメッセージを格納した後、パブリッシャがHTTP要求を開始させることですが、これは、なぜ、あなたはメッセージキューを使用している、質問を頼みますか?

キューでリスニング消費者のセットを持つ、メッセージが来ると自分の仕事をしているが、それは良い、スケーラブルな設計で、その場しのぎではありません。メッセージを格納するデータベース、たとえば、とは対照的に、(私は無限ループにPHPのプロセスを実行すると、その短所を持っていることに同意しますけど。)

なぜあなたは、メッセージキューを選択していますか? 「プロデューサ」は、メッセージをテーブルに行として格納し、メッセージのPKを使用して「コンシューマ」をトリガすることができます。

+1

良い質問です。 MQを検討しているのは、アプリケーションが柔軟なワークフローに向かって動き出しているからです。ビジネスロジックは、プロセスの次のステップを決定します。メッセージキューでサポートされている「ビン」パラダイムを使用するのは当然のことです。 – kander

+0

リッスンのコンシューマーは、私がクルージングと考えている部分ではなく、非常に健全なアーキテクチャのように聞こえます。それはwhile(1){$ client-> fetch(); }それは望ましくない構造です。 – kander

+0

私は参照してください。私の個人的な意見は、PHPコンシューマデーモンの実行を再考すべきです。すべてのメッセージがコンシューマをトリガする場合、MQを使用する際のポイントはあまりありません(1,000,000のメッセージが同時に到着したときどうなりますか?) - コンシューマコードをプロデューサから呼び出すこともできますその場合は。 – aib

1

は、HTTPエンドポイント(HTTP成分)にキュー(JMS成分)と前方からのメッセージを引くキャメルルートを作成することを検討してください。あなたは、インテリジェントルーティングブローカーの一種を作成するActiveMQブローカープロセスでCamelルートをホストすることを決定するかもしれません。 ActiveMQは、Camel CoreライブラリをActiveMQ配布にバンドルすることで、これを容易にします。ここで

は最近、関連/関連記事です:

HTTP Post From ActiveMQ using Camel

1

キューを監視するためのアプリのあなたのデザインコンセプトは、実行するために外部アプリケーションをトリガーする業界の方法です。 IBM Websphereの「トリガー・モニター・アプリケーション」を参照してください。それらの実装では、複数のトリガモニタを使用してキュー内のメッセージを処理するアプリケーションを起動できるので、アプリケーションがインストールされているサーバ上でトリガモニタが動作するようになります(スケーラビリティを設計する場合は必要に応じていくつかのアプリケーションサーバーを持っている)。

関連する問題