4

サーバーからのデータに対して同期要求/クエリを実行する必要があるモバイル アプリケーションがあるとします。リクエストは最初にホストされた JMS クライアントに送信され、外部キューに (パートナーから) メッセージ/リクエストが発行されます。ここで、不明確になり始めます。同期方式でパートナーから応答を返すにはどうすればよいですか。

  • パートナーは、サブスクライブするために別のキューを公開し、その別のキューから応答メッセージを取得するまでモバイル リクエストをブロックする必要がありますか?
  • JMS または独自の WebSphere MQ インターフェースは、同期メッセージングをサポートしていますか?
  • メッセージングでそれを実装する他の方法は何ですか?

ありがとう

4

3 に答える 3

4

教科書のパターンは次のとおりです。

  1. JMS アプリがモバイル デバイスからリクエストを受信します。
  2. JMS アプリが返信先キューを開きます (動的な場合があります)。
  3. JMS アプリは、#2 の宛先を JMSREplyTo 宛先として指定する要求メッセージを準備します。
  4. JMS アプリケーションは、同期点の外部で要求を外部サービス プロバイダーに送信します。
  5. JMS アプリは、指定された待機間隔で応答をリッスンします。動的な返信先キューを使用した場合は、単純な受信を行います。複数のインスタンスが同じキューでリッスンしている場合 (外部サービスの場合が多い)、送信から返された JMSMessageID を受信で指定された JMSCorrelationID として使用します。
  6. JMS アプリは、外部サービスからの応答を受け取ります。
  7. JMS アプリがモバイル デバイスに応答します。

WMQ では、サービス プロバイダーからの予想される動作は、JMSMessageID を要求メッセージから応答の JMSCorrelationID にコピーすることであることに注意してください。送信者が JMSCorrelation ID を生成し、それを応答の JMSCorrelationID にコピーすることを要求することはあまり一般的ではありませんが、一部のアプリケーションはその動作を使用します。リクエスター アプリケーションの正しい動作を判断するには、サービス プロバイダーがこれをどのように処理するかを理解する必要があります。

完全な WMQ クライアント インストールを使用している場合は、これのほとんどを実行するサンプル コードが既に用意されています。デフォルトの場所にインストールされている場合は、次を参照してください...

C:\Program Files\IBM\Websphere MQ\tools\jms\samples\simple\simpleRequestor.java

...または/var/mqmUNIX/Linux ディストリビューションの同等の場所。これは、単純に jar ファイルを取得するのではなく、完全なクライアントをインストールする多くの理由の 1 つです。クライアントをダウンロードする必要がある場合は、SupportPac MQC7として提供されます。

于 2011-02-17T20:23:52.153 に答える
2

「クライアント」は一時キューを作成し、この名前をリクエストに渡すことができます。

「サーバー」は既知のキューでリクエストを受信しますが、「クライアント」によって指定されたキューの名前を持つ「replyTo」を送信します。

JMSには、この目的のための「replyTo」プロパティがあります。

このように、クライアントはそれを対象としたメッセージのみを見ることができます。

于 2011-02-17T17:23:00.913 に答える
0

頭のてっぺんには2つの方法があります。

  1. 着信と発信の 2 つのキューを作成します。クライアントは受信キューに送信し、送信キューからメッセージを受信します。

  2. 両方に同じキューを使用できます。各メッセージに特別なプロパティを設定し、セレクターを使用して関連するメッセージのみをフィルタリングするだけです。

サーバー側は、最初にメッセージを送信してからreceiveメソッドを呼び出す必要があります (JMS javadoc を参照)。このメソッドは、メッセージを受け取るかタイムアウトになるまでブロックされます。この方法を使用し、メッセージをリッスンしないことが重要です (リスナーは非同期モードに使用されます)。

于 2011-02-17T16:16:49.390 に答える