JMS Connector を使用したメッセージのコンシューム

JMS 用 Anypoint Connector (JMS Connector) の ​Consume​ 操作を使用すると、フローの任意の時点で任意の指定宛先からのメッセージをコンシュームできます。

キューからのメッセージのコンシューム

次の例では、​[Destination (宛先)]​ 項目で指定したキュー内の新規メッセージをコンシュームするように ​Consume​ 操作を設定します。この操作では、キューで JMS メッセージが使用可能になるたびに Mule メッセージが返されます。Mule メッセージは次の要素で構成されます。

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

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

このメタデータは、3 つの部分から構成され、JMS メッセージで使用できるすべての情報にマップされます。

  • AckId

  • ヘッダー

  • プロパティ

デフォルトでは、コンシュームされたメッセージは、メッセージを受信するフローの実行が正常に完了した場合にのみ肯定応答されます (「ACKed」)。何らかの処理を行った後でメッセージの肯定応答を制御する場合は、​ackMode​ を ​MANUAL​ に設定します。 メッセージ肯定応答についての詳細は、​「メッセージ肯定応答の管理」​を参照してください。

Studio でソースを設定する手順は、次のとおりです。

  1. [Mule Palette (Mule パレット)]​ ビューで、​[JMS] > [Consume]​ を選択します。

  2. [Consume]​ を Studio キャンバスにドラッグします。

  3. [Consume]​ 設定画面で、必要に応じて ​[Display Name (表示名)]​ 項目の値を変更します。

  4. [Consume]​ 設定画面の ​[Destination (宛先)]​ で、メッセージのコンシューム元である宛先の名前 (​#[vars.destination]​ など) を指定します。

Consume 操作の画面で [Destination (宛先)] 項目を、メッセージのコンシューム元である宛先の名前に設定する
Figure 1. JMS Connector の Consume の設定

XML エディターでは、​<jms:consume>​ 設定は次のように記述されます。

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

トピックサブスクリプションからのメッセージのコンシューム

次の例では、​[Consumer type (コンシューマー種別)]​ 項目を ​[Topic consumer (トピックコンシューマー)]​ に設定し、トピックサブスクリプションから新規メッセージをコンシュームするように ​Consume​ 操作を設定します。

Studio でソースを設定する手順は、次のとおりです。

  1. [Mule Palette (Mule パレット)]​ ビューで、​[JMS] > [Consume]​ を選択します。

  2. [Consume]​ を Studio キャンバスにドラッグします。

  3. [Consume]​ 設定画面で、必要に応じて ​[Display Name (表示名)]​ 項目の値を変更します。

  4. [Consume]​ 設定画面の ​[Destination (宛先)]​ で、メッセージのコンシューム元である宛先の名前 (​#[vars.destination]​ など) を指定します。

  5. [Consumer type (コンシューマー種別)]​ 項目を ​[Topic consumer (トピックコンシューマー)]​ に設定します。

Consume 操作の画面で [Destination (宛先)] 項目を設定し、[Consumer Type (コンシューマー種別)] 項目を [Topic consumer (トピックコンシューマー)] に設定する
Figure 2. JMS Connector の Consume のトピックサブスクリプションの設定

XML エディターでは、​<jms:consume>​ および ​<jms:topic-consumer/>​ 設定は次のように記述されます。

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

メッセージの待機

デフォルトでは、​Consume​ 操作では、メッセージを最大 10,000 ミリ秒待機した後、エラー ​JMS:TIMEOUT​ を送信します。 ユーザーのユースケースに合わせて、​[Maximum wait (最大待機)]​ および ​[Maximum wait unit (最大待機単位)]​ 項目を設定します。 メッセージの到着を無制限に待つ場合は、​[Maximum wait (最大待機)]​ 項目を ​-1​ に設定します。これで、​JMS:TIMEOUT​ エラーが回避されます。

メッセージのポーリング

特定の頻度でメッセージをポーリングする場合、メッセージの待機でコンシューマーをブロックすることは望まれませんが、代わりに、メッセージが存在する場合にメッセージのコンシュームを試みることはできます。 この場合、​[Maximum wait (最大待機)]​ 項目を ​0​ に設定します。これにより、待機は発生せず、指定した宛先に使用できるメッセージがなくてもエラーはスローされません。 コンシュームできるメッセージが存在しない場合、​Consume​ 操作の出力は ​null​ になり、エラーはスローされません。

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

JMS Connector では、​Consume​ 操作の ​[Selector (セレクター)]​ 項目で指定した標準の JMS セレクター言語に基づいて、コンシュームするメッセージを絞り込むことができます。これにより、セレクター言語に一致するメッセージのみが受信され、宛先にある他のメッセージはすべて無視されます。

次の例では、他のキューよりも先にメッセージを処理する優先キューを設定します。

  1. Studio で、フローから ​[Consume]​ 操作を選択します。

  2. [Destination (宛先)]​ 項目を ​openTickets​ に設定します。

  3. [Selector (セレクター)]​ 項目を ​JMSPriority=8​ に設定します。

JMS Connector の On New Message のメッセージの絞り込み image::jms-consume-selector.png[Consume 操作の画面で、受信メッセージを絞り込むように [Selector (セレクター)] 項目を設定する]

XML エディターでは、​selector​ 設定は次のように記述されます。

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

MIME タイプとエンコードの設定

JMS Connector では、​MM_MESSAGE_CONTENT_TYPE​ プロパティに基づいてメッセージの MIME タイプ (​contentType​) を判別します。ただし、メッセージのコンテンツを管理する必要がある場合は、​[Content-Type (コンテンツタイプ)]​ 項目を、必要な特定のコンテンツタイプ値に設定します。

デフォルトでは、他の情報が提供されていない場合、JMS Connector は Mule Runtime Engine のデフォルトエンコードがメッセージのエンコードと一致するものと想定します。別の種別のエンコードを設定するには、​[Encoding (エンコード)]​ 項目を使用します。

次の例では、コンテンツタイプとエンコードを設定します。

  1. Studio で、フローから ​[Consume]​ 操作を選択します。

  2. [Content-Type (コンテンツタイプ)]​ 項目を ​application/JSON​ に設定します。

  3. [Encoding (エンコード)]​ 項目を ​UTF-8​ に設定します。

Consume 操作の画面で、[Content-Type (コンテンツタイプ)] 項目と [Encoding (エンコード)] 項目を設定する
Figure 3. JMS Connector の Consume のコンテンツタイプとエンコード

XML エディターでは、​contentType​ および ​encoding​ 設定は次のように記述されます。

	<jms:consume  destination="#[vars.destination]" contentType="application/JSON" encoding="UTF-8"/>