新規メッセージのリスン

IBM MQ のリスナーソースと JMS Connector を使用すると、メッセージが宛先に届くたびにコンシュームすることができます。

新規メッセージのリスン

キューからの新規メッセージをリスンするための構文は次のとおりです。

<ibm-mq:listener config-ref="config" destination="#[vars.destination]"/>

ソースは、宛先で識別されるキューで新規メッセージをリスンし、キューに JMS メッセージが登録されるたびに Mule メッセージを返します。

メッセージには以下の情報が含まれます。

  • ペイロードとしてのメッセージのコンテンツ。

  • メッセージ属性に含まれるメッセージのメタデータ。

デフォルトでは、コンシュームしたメッセージは、メッセージを受信したフローの実行が正常に完了した時点でのみ肯定応答されます。 フローの実行中にエラーが発生してセッションのリカバリーが発生した場合は、JMS メッセージは再配信されます。

メッセージの肯定応答については、​「メッセージ肯定応答の処理」​を参照してください。

メッセージスループットの設定

より多くの処理能力が必要である場合、JMS リスナーでは ​numberOfConsumers​ を設定することで、特定のリスナーがメッセージをコンシュームするために同時に使用するコンシューマーの数を指定できます。 デフォルトでは、各リスナーは 4 つのコンシューマーを使用してメッセージを同時に生成します。各コンシューマーは処理するメッセージを待つため、同時に最大 4 件のメッセージが転送されることになります。 メッセージの同時処理数を増やす必要がある場合は、リスナーの ​numberOfConsumers​ 設定を増やしてください。

受信メッセージの絞り込み

JMS Connector は、標準の JMS ​selector​ 言語に基づいた、コンシュームするメッセージの絞り込みを完全にサポートします。

たとえば、他のメッセージよりも先に処理する必要のあるメッセージが登録される優先キューがある場合は、次のように絞り込みを行うことができます。

<flow name="consumer">
    <ibm-mq:listener config-ref="JMS_config"
    destination="openTickets"
    selector="JMSPriority=8"/>
</flow>

セレクターを設定すると、一致するメッセージのみ受信され、宛先にある他のメッセージはすべて無視されます。

MIME タイプおよび文字コード

JMS Connector は、MM_MESSAGE_CONTENT_TYPE プロパティに基づいて、できる限り正確にメッセージの MIME タイプ (​contentType​) を自動的に判断します。しかしながら、最良の判断が間違っていることもあり、その場合は、メッセージのコンテンツに関する情報を提供する必要があります。このような場合には、​inboundContentType​ パラメーターを使用して、コンテンツタイプを特定の値に設定します。

同じプロセスが文字コードでも機能します。デフォルトでは、他の情報が提供されていない場合、コレクターはランタイムのデフォルトエンコードがメッセージのエンコードと一致するものと想定します。これは ​inboundEncoding​ パラメーターで設定できます。

受信メッセージへの返信

受信した JMS メッセージで ​[Reply to (返信先)]​ 宛先が宣言されている場合、​On new message​ ソースはメッセージが正常に処理された時点で (つまり、フローの実行中にエラーが発生しなかった場合に) 応答を生成します。 この場合、フローの完了時に、処理したメッセージのヘッダーで指定されている宛先に応答がパブリッシュされます。

次の XML 構文を使用して、​On New message​ ソースの IBM MQ 応答を設定できます。

<ibm-mq:listener config-ref="config" destination="#[vars.destination]">
  <ibm-mq:response priority="8" persistentDelivery="true">
      <ibm-mq:body>#['Message received was: ' ++ payload]</ibm-mq:body>
      <ibm-mq:properties>#[{'processedAt': now}]</ibm-mq:properties>
  </ibm-mq:response>
</ibm-mq:listener>

On New Message​ ソースの ​[Reply to (返信先)]​ 項目で、元のメッセージの [reply to (応答先)] 項目は上書きされませんが、[reply to (応答先)] 項目が応答として送信されるメッセージの項目に設定されます。

この応答ビルダーにより、応答メッセージの ​body​ および ​properties​ を設定できるだけでなく、​priority​ や ​persistentDelivery​ などの任意のヘッダーを指定することもできます。 これらの設定はすべてアウトバウンドメッセージに影響し、プロセスの完了時にフローで使用できるすべての情報を使用して構築できます。

ibm-mq:response​ 要素の ​ignoreReplyTo​ 属性を使用して、自動返信を無効にします。

<ibm-mq:listener config-ref="config" destination="#[vars.destination]">
  <ibm-mq:response priority="8" persistentDelivery="true" ignoreReplyTo="true"/>
</ibm-mq:listener>

トピックサブスクリプションを使用したメッセージのリスン

トピックの宛先からのメッセージのリスンは、キューからのリスンと非常によく似ていますが、トピックサブスクリプションを使用してコンシューマー間で状態を共有できるという追加の機能があります。 トピックにサブスクライブするための構文は次の通りです。

<ibm-mq:listener config-ref="JMS_config" destination="#[vars.destination]">
    <ibm-mq:consumer-type>
        <ibm-mq:topic-consumer/>
    </ibm-mq:consumer-type>
</ibm-mq:listener>

listener​ パラメーターはすべて同じですが、​topic-consumer​ パラメーターでサブスクリプション設定を定義できます。

トピックサブスクリプションの設定方法についての詳細は、​「トピックサブスクリプションの使用」​を参照してください。