11

メッセージング (JMS) 経由でのみアクセスできる外部アプリからデータを取得して表示することが期待される Web アプリがあります。

そのため、ユーザーがブラウザでリクエストを送信した場合、同じ HTTP リクエスト スレッドがメッセージング システム (MQ シリーズ) と対話して、同じリクエスト スレッドがメッセージング システムから受信したデータを表示できるようにする必要があります。

ここで利用できるパターンはありますか?このように「相関ID」を使用する漠然とした参照をネット上で見ました:

Msg m = new TextMsg("findDataXYZ");
String cr_id = m.setCorrelationID(id);

sendQueue.send(m).

// now start listening to the Queue for a msg that bears that specific cr_id

Response r = receiverQueue.receive(cr_id);

そこにもっと良いものはありますか?私が見つけた他のパターンは、応答が非同期で受信されることを期待しています..同じ HTTP 要求で応答を送り返す必要があるため、これはオプションではありません。

4

2 に答える 2

10

要求/応答メッセージング パターンは、要件に役立ちます。通常、CorrelationId を使用して、要求メッセージと応答メッセージを関連付けます。

リクエスト メッセージの送信中に、メッセージに JMSReplyTo 宛先を設定します。通常、一時キューは JMSReplyTo 宛先として使用されます。応答を受信するコンシューマーを作成するときは、JMSCorrelationId のようなセレクターを使用します。

cons = session.createConsumer(tempDestination,"JMSCorrelationId="+requestMsg.JMSMessageId);

一方、要求メッセージを処理するアプリケーションは JMSReplyTo 宛先を使用して応答を送信する必要があります。また、要求メッセージの MessageId を使用し、応答メッセージの CorrelationId として設定する必要があります。

于 2012-05-28T04:13:13.123 に答える
5

まず、応答キューを開きます。次に、そのオブジェクトをメッセージの set reply-to メソッドに渡します。そうすれば、リクエストに応答するサービスは、応答の送信先を認識します。通常、サービスはメッセージ ID を相関 ID フィールドにコピーするため、メッセージを送信するときに、返されたメッセージ ID を取得し、それを使用て応答キューをリッスンします。もちろん、動的な返信先キューを使用する場合でも、それは必要ありません。キューで次のメッセージをリッスンするだけです。

このすべてを示すサンプル コードがあります。デフォルトの場所にインストールした場合、サンプル コードは"C:\Program Files (x86)\IBM\WebSphere MQ\tools\jms\samples\simple\SimpleRequestor.java"Windows ボックスまたは/var/mqm/toolsjms/samples/simple/SimpleRequestor.java*nix ボックスに存在します。

また、「正確には何をインストールするのですか?」と疑問に思う場合があります。WMQ クライアントのインストールは、 SupportPac MQC71として無料でダウンロードできます。

于 2012-05-28T03:41:37.590 に答える