JMS メッセージのコンシューム方法

JMS コネクタの Consume 操作により、任意の宛先からフローの任意の時点でメッセージをコンシュームする機能が提供されます。

メッセージのコンシューム

キューからメッセージをコンシュームするための構文は、次のとおりです。

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

上記の操作では、宛先によって識別されるキューで最初に使用可能なメッセージをコンシュームし、MuleMessage に変換するため、次の構造が得られます。

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

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

メッセージは受信されると、デフォルトでは直ちに肯定応答されます。何らかの処理を行った後でメッセージの肯定応答を制御する場合は、ackModeMANUAL に設定する必要があります。 メッセージの肯定応答に関する詳細については、「メッセージ肯定応答の処理方法」をご覧ください。

メッセージの待機

デフォルトでは、最大待機時間は 10 秒に設定されており、その期間中に使用できるメッセージがない場合は JMS:TIMEOUT エラーが発生します。 ユースケースに最適なタイムアウトを設定するには、maximumWait パラメータと maximumWaitUnit パラメータをカスタマイズします。

メッセージが到着するのを永久に待機するには、maximumWait の値を -1 に設定する必要があります。この場合、TIMEOUT エラーが発生することはありません。

メッセージのポーリング

特定の頻度でメッセージをポーリングする場合、コンシューマがメッセージの待機をブロックするのは望ましいことではありませんが、代わりに、メッセージが存在する場合は単にコンシュームしようと試みます。 この場合、maximumWait0 に設定できます。これは、待機が発生せず、宛先で使用できるメッセージがなくても JMS:TIMEOUT が発生しないことを示します。 コンシュームできるメッセージが存在しない場合、consume 操作の出力は null になり、エラーは発生しません。

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

JMS コネクタは、標準的な JMS セレクタ言語​に基づいたコンシュームするメッセージの絞り込みを十分にサポートしています。

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

<jms:consume config-ref="JMS_config" destination="openTickets" selector="JMSPriority=8"/>

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

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

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

このような場合には、contentType パラメータを使用して、コンテンツタイプを特定の値に設定します。

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

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

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

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

consume 操作のすべてのパラメータは同じままですが、topic-consumer パラメータでサブスクリプション設定を処理できるようになっています。

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

受信メッセージのメタデータ

前述のとおり、受信された各メッセージは 2 つの部分で構成されます。

  • メッセージのコンテンツが含まれるペイロード

  • メッセージに関するメタデータが含まれる属性

このメタデータには、JMS メッセージで使用できるすべての情報をマッピングする 3 つの部分があります。

  • AckId

  • ヘッダー

  • Properties (プロパティ)

属性の構造についての詳細は、「JMS リファレンス」をご覧ください。

Was this article helpful?

💙 Thanks for your feedback!

Edit on GitHub