返信のリスン

要求と応答はアプリケーション間で広く行われているパターンであるため、新しい IBM MQ Connector は ​publish-consume​ という操作をそのために提供しています。 publish-consume 操作では、メッセージを任意の宛先にパブリッシュしてから、異なる宛先での応答を待つことができます。

publish-consume 操作を使用する場合、送信メッセージの JMSReplyTo ヘッダーで、アプリケーションが応答を待つ宛先の ID が渡されます。この宛先は、既知の宛先か、または特定の応答メッセージを受け取るためだけに一時的に作成される宛先のどちらかになります。

操作の結果として、コンシューム操作が呼び出された場合と同じ構造を持つ応答メッセージが受信されます。

一時キューでの応答の待機

一時キューを使用して応答を待機するための設定は非常にシンプルで、送信するメッセージを設定するだけで、操作は自動的に一時キューで応答を待ちます。

<ibm-mq:publish-consume
     config-ref="config"
     destination="targetDestination"
     maximumWait="20"
     maximumWaitUnit="SECONDS"/>

この例では、現在のペイロードを本文とし、JMSReplyTo ヘッダーを一時的な宛先としたメッセージを ​targetDestination​ にパブリッシュします。 その後、一時キューから応答メッセージをコンシュームするか、または maximumWait 時間が経過するまで (この場合は IBM-MQ:TIMEOUT エラーで操作が失敗します)、自動的に応答のコンシュームを試みます。

既知のキューでの応答の受信

多くの場合、要求ごとに応答キューを作成する必要はなく、既知のキューを応答に使用できます。 この場合、自分で実行するのは、送信メッセージで ​reply-to​ パラメーターを設定することだけです。

<ibm-mq:publish-consume config-ref="config"
     destination="targetDestination">
    <ibm-mq:message>
        <ibm-mq:reply-to destination="replyToDestination"/>
    </ibm-mq:message>
</ibm-mq:publish-consume>

この例では、現在のペイロードを本文とし、JMSReplyTo ヘッダーを ​replyToDestination​ に設定したメッセージを ​targetDestination​ にパブリッシュします。

その後、メッセージがコンシュームされるか、maximumWait 時間が経過するまで (この場合は IBM-MQ:TIMEOUT エラーで操作が失敗します)、replyToDestination キューから自動的に応答のコンシュームを試みます。

要求応答パターン

IBM MQ Connector v1.5.0:

JMS には、要求メッセージと応答メッセージの相関方法を示すよく知られた要求応答パターンが 2 つあります。これは、受信したメッセージが出力メッセージの正しい応答であることを保証する方法を意味します。

相関 ID パターン

このパターンは、Publish Consume 操作のデフォルトです。このパターンを使用すると、宛先キューにメッセージをパブリッシュした後の操作で、要求メッセージのパブリッシュに使用する相関 ID と同じ相関 ID を持つメッセージを期待するセレクターを使用して、メッセージがコンシュームされます。

クライアントおよびリスナーの IBM MQ 相関 ID パターンの実装
<flow name="publish-consume-correlation-id">
  <ibm-mq:publish-consume config-ref="config"
    destination="targetDestination"
    requestReplyPattern="CORRELATION_ID">
    <ibm-mq:message >
      <ibm-mq:reply-to destination="replyToDestination" />
    </ibm-mq:message>
  </ibm-mq:publish-consume>
  <logger message="Received message from 'replyToDestination' with Correlation ID: #[attributes.headers.correlationId]"/>
</flow>

<flow name="ibm-mq-listener-correlation-id" >
  <ibm-mq:listener config-ref="config" destination="targetDestination">
    <ibm-mq:reply-to-response requestReplyPattern="CORRELATION_ID" />
  </ibm-mq:listener>
  <logger level="INFO" message="About to reply to 'targetDestination' with Correlation ID: #[attributes.headers.correlationId]"/>
</flow>

メッセージ ID パターン

メッセージ ID パターンは、相関 ID パターンとは異なり、宛先キューにメッセージをパブリッシュした後の操作で、要求メッセージのメッセージ ID と同じ値の相関 ID を持つメッセージを期待するセレクターを使用して、メッセージがコンシュームされます。

クライアントおよびリスナーの IBM MQ メッセージ ID パターンの実装
<flow name="publish-consume-message-id">
  <ibm-mq:publish-consume config-ref="config"
   destination="targetDestination"
   requestReplyPattern="MESSAGE_ID">
    <ibm-mq:message >
      <ibm-mq:reply-to destination="replyToDestination" />
    </ibm-mq:message>
  </ibm-mq:publish-consume>
  <logger message="Received message from 'replyToDestination' with Correlation ID: #[attributes.headers.correlationId]"/>
</flow>

<flow name="ibm-mq-listener-message-id" >
  <ibm-mq:listener config-ref="config" destination="targetDestination">
    <ibm-mq:reply-to-response requestReplyPattern="MESSAGE_ID" />
  </ibm-mq:listener>
  <logger level="INFO" message="About to reply to 'targetDestination' with Correlation ID: #[attributes.headers.messageId]"/>
</flow>

なし

上記のどのパターンも使用しないように操作を設定することもできます。この場合、コンシューマーはセレクターを使用してメッセージを相関するのではなく、応答キューからコンシュームを試みます。

確実に 1 つのメッセージのみが含まれる一時キューを使用して作業する場合は、このオプションが役立ちます。