1

Websphere MQ では、メッセージが到着したときにアプリケーションをトリガーするようにキューを構成できます。
そうすれば、必要な場合にのみ起動するアプリケーションを作成でき、そのキューでメッセージを待機するデーモンを 1 つ管理する必要がなくなります。
詳しくはこちら

この機能を提供するオープン ソースの JMS プロバイダはありますか?

ActiveMQ を試しましたが、トリガーがありません。

4

1 に答える 1

1

qpid には、websphere-MQ のようなモニター トリガー機能はありません。ActiveMQ もそうではないことを私は知っています。これは他の JMS プロバイダーにも当てはまるのではないかと思います。ただし、独自のモニタートリガーをロールアウトすることは可能です。

自作のモニタートリガーは、管理する必要があるアプリケーションプロセス(軽量ではありますが)になりますが、実際のアプリケーションスレッド自体を管理する方がよいでしょうか?


qpid で監視トリガーを実装するには:

JMS 仕様では、非同期配信モードが定義されています。セクション 4.5.2 を参照してください。したがって、これは任意の JMS プロバイダーで実行できるはずです。非同期リスナーはインターフェースを実装しjavax.jms.MessageListenerます。メソッドonMessage()を実装する必要があり、サブスクライブ先のキューに新しいメッセージが表示されたときにコールバック関数として機能します。

メイン アプリケーション キューが であるとしますmainQ。mainQ からのメッセージを実際に消費しないように、ブラウズ モードで新しいMessageListenerfor を作成します。mainQ

Destination mainQ = (Destination) session.createQueue("mainQ; {mode: browse}");
MessageConsumer mainQConsumer = session.createConsumer(mainQ);
mainQConsumer.setMessageListener(this);

onMessage()関数では、別のメッセージを作成するか、このtriggerQ手順をスキップしてアプリケーションをすぐに起動できます。

public void onMessage(Message message)
{
  TextMessage triggerMessage = session.createTextMessage("Trigger-start-Application-X");

  Destination triggerQ = (Destination) session.createQueue("triggerQ");
  triggerQProducer = session.createProducer(triggerQ);
  this.triggerQProducer.send(triggerMessage);

  // Or alternatively:
  // if (!applicationIsActive()) activateApplication()
}

ここで完全な作業サンプルを参照してください: https://github.com/foragerr/qpid-trigger-demo

于 2015-04-30T09:53:28.203 に答える