新規メッセージのリスン方法

JMS コネクタのリスナソースにより、メッセージが宛先に到着した時点でコンシュームできるようになります。

新規メッセージのリスン

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

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

上記のソースは、宛先によって識別されるキューの新しいメッセージをリスンし、JMS メッセージがキューで使用できるようになるたびに MuleMessage を返します。

MuleMessage には以下が含まれます。

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

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

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

メッセージの肯定応答に関する詳細については、「メッセージ肯定応答の処理方法」をご覧ください。

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

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

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

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

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

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

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

Mime タイプとエンコーディング

JMS コネクタは、MM_MESSAGE_CONTENT_TYPE プロパティに基づいてメッセージの mime タイプ (contentType) を自動的に判断するために最善を尽くします。ただし、最善の推測では不十分な場合もあり、こういった場合にはメッセージのコンテンツを実際に把握しておく必要があります。このような場合には、inboundContentType パラメータを使用して、コンテンツタイプを特定の値に設定します。

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

受信メッセージへの返信

受信 JMS メッセージで REPLY_TO 宛先が宣言されている場合、JMS リスナは​メッセージが正常に処理された場合に​自動的に応答を生成します。つまり、フロー実行中にエラーは発生しません。 その場合、フローが完了すると、応答が処理済みのメッセージヘッダーで指定された宛先に公開されます。

リスナでは、次の構文で応答を設定できます。

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

この応答ビルダーにより、応答メッセージの body および properties を設定できるだけでなく、prioritypersistentDelivery などの任意のヘッダーを指定することもできます。 この設定はすべてアウトバウンドメッセージで影響を及ぼし、処理が完了した時点でフローで使用可能なすべての情報を使用して構築できます。

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

トピック宛先からのメッセージのリスンはキューからのリスンとほぼ同じですが、コンシューマ間で状態を共有するためにトピックサブスクリプションを使用する追加機能があります。 トピックをサブスクライブするための構文は、次のとおりです。

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

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

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

Was this article helpful?

💙 Thanks for your feedback!