JMS Connector を使用した新規メッセージのリスン

JMS 用 Anypoint Connector (JMS Connector) の ​On New Message​ ソースを使用すると、指定した宛先に到着した新しいメッセージをリスンし、コンシュームできます。

JMS Connector と Oracle JMS を使用する場合、​On New Message​ ソースでは、メッセージの頻度に基づいて 1 ~ 10 の遅延で新しいメッセージを受信します。この動作は、​-Doracle.jms.maxSleepTime=xxxx​ を使用して制御します。

キューからの新規メッセージのリスン

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

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

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

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

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

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

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

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

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

On New Message ソースの画面で、[Destination (宛先)] 項目を、メッセージのコンシューム元である宛先の名前に設定
Figure 1. JMS Connector の On New Message のキューの設定

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

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

トピックサブスクリプションからの新規メッセージのリスン

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

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

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

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

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

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

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

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

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

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

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

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

次の例では、特定のヘッダー優先キューに一致するメッセージを絞り込むように ​[Selector (セレクター)]​ 項目を設定します。

  1. Studio で、フローから ​[On New Message]​ ソースを選択します。

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

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

On New Message ソースの画面で、受信メッセージを絞り込むように [Selector (セレクター)] 項目を設定
Figure 3. JMS Connector の On New Message のメッセージの絞り込み

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

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

受信メッセージへの応答

受信した JMS メッセージで ​ReplyTo​ ヘッダー宛先が宣言されており、メッセージがエラーなく正常に処理された場合、​On New Message​ ソースにより応答が自動的に生成され、コネクタにより応答が、​[Destination (宛先)]​ 項目で指定された宛先にパブリッシュされます。

次の例では、操作の応答メッセージセクションを設定します。

  1. Studio で、フローから ​[On New Message]​ ソースを選択します。

  2. [Response (応答)]​ セクションで、​[Ignore Jms replyTo Header (JMS replyTo ヘッダーを無視)]​ を ​True​ に設定します。これにより、自動応答が無効になります。

  3. [Body (本文)]​ 項目を ​'Message received was: ' ++ payload​ に設定します。

  4. [User Properties (ユーザープロパティ)]​ 項目を ​{'processedAt': now}​ に設定します。

  5. [Persistent delivery (永続的な配信)]​ を ​True​ に設定します。

  6. [Priority (優先度)]​ 項目を ​8​ に設定します。

On New Message ソースの画面で応答セクションの項目を設定
Figure 4. JMS Connector の On New Message の応答の設定

XML エディターでは、​ignoreReplyTo​、​body​、​properties​、​persistentDelivery​、および ​priority​ の設定は次のように記述されます。

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

コンシューマー数の設定

より多くの処理能力が必要である場合は、​[Number of consumers (コンシューマー数)]​ 項目を、​On New Message​ でメッセージを同時にコンシュームするために使用するコンシューマーの数に設定します。
デフォルトでは、各ソースは ​4​ 個のコンシューマーを使用してメッセージを同時に生成します。各コンシューマーはメッセージが処理されるまで待機するため、同時に最大 ​4​ 件のメッセージが転送されることになります。

次の例では、ソース内でコンシューマーの数を増やします。

  1. Studio で、フローから ​[On New Message]​ ソースを選択します。

  2. [Number of consumers (コンシューマー数)]​ 項目を ​4​ から、JMS メッセージを受信する同時コンシューマー数 (​6​ など) に増やします。

On New Message ソースの画面で、[Number of consumers (コンシューマー数)] 項目を同時コンシューマー数に設定します。
Figure 5. JMS Connector の On New Message のコンシューマー数

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

<jms:listener doc:name="On New Message" destination="#[vars.destination]" numberOfConsumers="6"/>

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

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

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

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

  1. Studio で、フローから ​[On New Message]​ ソースを選択します。

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

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

On New Message ソースの画面で、[Number of consumers (コンシューマー数)] 項目を同時コンシューマー数に設定します。
Figure 6. JMS Connector の On New Message のコンテンツタイプとエンコード

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

<jms:listener doc:name="On New Message" destination="#[vars.destination]" numberOfConsumers="6" inboundContentType="application/JSON" inboundEncoding="UTF-8"/>