JMS Connector を使用したメッセージのパブリッシュ

JMS 用 Anypoint Connector (JMS Connector) の ​Publish​ 操作を使用すると、新しい JMS メッセージを作成し、キューまたはトピックにかかわらず指定した宛先に送信できます。この操作を使用して、メッセージの内容だけでなく、必要なヘッダーも設定できます。

キューへのメッセージのパブリッシュ

Publish​ 操作では、メッセージペイロード内のすべての内容を、指定したキューにパブリッシュします。次の例では、​[Destination (宛先)]​ 項目で指定したキューにメッセージをパブリッシュするように操作を設定します:

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

  2. [Destination (宛先)]​ 項目をキュー名 (​invoiceQueue​ など) に設定します。

「Publish」 設定画面で 「Destination (宛先)」 項目を、メッセージの送信先である宛先の名前に設定する
Figure 1. キューへの Publish 操作の設定

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

<jms:publish destination="invoiceQueue" config-ref="JMS_config"/>

適切な形式ではないためにペイロードを変換する必要がある場合、​Publish​ 操作の前に DataWeave 変換を配置できますが、これによりメッセージペイロードが変更され、変換の後に配置された操作に影響することがあります。
この影響を回避するには、​Publish​ 操作の内部に DataWeave 変換を配置します。この変換では、送信中のメッセージに影響することなく、パブリッシュするコンテンツが生成されます。次の例では、操作の内部で変換を設定します。

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

  2. [Destination (宛先)]​ 項目をキュー名 (​invoiceQueue​ など) に設定します。

  3. [Body (本文)]​ 項目で、次の DataWeave 変換を設定します。

%dw 2.0
output application/json
---
payload.payments
「Publish」 設定画面で、DataWeave 変換を 「Body (本文)」 項目の内部に配置する
Figure 2. Publish 操作での DataWeave 変換の設定

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

<jms:publish destination="invoiceQueue" config-ref="JMS_config">
  <jms:message>
    <jms:body>#[%dw 2.0
   output application/json
   ---
   payload.payments
   ]</jms:body>
  </jms:message>
</jms:publish>

トピックへのメッセージのパブリッシュ

Publish​ 操作では、指定したトピック宛先にメッセージをパブリッシュすることもできます。操作とメッセージのすべての設定は同じため、​[Destination type (宛先種別)]​ 項目を ​[TOPIC (トピック)]​ に設定するだけで済みます。

次の例では、トピック宛先にメッセージをパブリッシュするように操作を設定します。

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

  2. [Destination (宛先)]​ 項目をキュー名に設定します。例: .トピック宛先への Publish 操作の設定 image::jms-publish-config-3.png[「Publish」 設定画面で、「Destination type (宛先種別)」 項目を 「TOPIC (トピック)」 に設定する]

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

<jms:publish destination="invoiceEvents" destinationType="TOPIC" config-ref="JMS_config">
  <jms:message>
    <jms:body>#[%dw 2.0
   output application/json
   ---
   payload.payments
   ]</jms:body>
  </jms:message>
</jms:publish>

メッセージ配信のカスタマイズ

各 JMS メッセージには一連のヘッダーがあり、これらを使用して存続期間やメッセージの優先度などのメタデータを渡すことができます。

優先キューの設定

優先キューを設定するには、​[Priority (優先度)]​ 項目をデフォルトとは異なる値に設定します。

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

  2. [Destination (宛先)]​ 項目をキュー名 (​priorityQueue​ など) に設定します。

  3. [Publish Configuration (パブリッシュ設定)]​ セクションで、​[Priority (優先度)]​ 項目を ​attributes.queryParams.priority​ に設定します。

「Publish」 設定画面で、「Priority (優先度)」 項目の値を設定する
Figure 3. Publish 操作の優先度の設定

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

<jms:publish priority="#[attributes.queryParams.priority]" destination="priorityQueue" config-ref="JMS_config"/>

存続期間の設定

パブリッシュされた各 JMS メッセージは、存続期間ヘッダーと共に送信されます。このヘッダーではメッセージをコンシュームできる期間が宣言され、この期間が過ぎるとメッセージの有効期限が切れます。操作で ​[Time to live (存続期間)]​ 項目と ​[Time to live unit (存続期間単位)]​ 項目を設定します。

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

  2. [Destination (宛先)]​ 項目をキュー名 (​vars.destination​ など) に設定します。

  3. [Publish Configuration (パブリッシュ設定)]​ セクションで、​[Time to live (存続期間)]​ 項目を ​vars.timeToLive​ に設定します。

  4. [Time to live unit (存続期間単位)]​ 項目を ​[SECONDS (秒)]​ に設定します。

「Publish」 設定画面で、「Time to live (存続期間)」 項目の値を設定し、「Time to live unit (存続期間単位)」 を 「SECONDS (秒)」 に設定する
Figure 4. Publish 操作の存続期間の設定

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

<jms:publish  timeToLive="#[vars.timeToLive]" timeToLiveUnit="SECONDS"
              destination="#[vars.destination]" config-ref="JMS_config"/>

JMS 2.0 仕様を使用している場合は、メッセージをコンシューマーが使用できるようになるまでの待機時間であるメッセージ配信遅延を制御することもできます。操作で ​[Delivery delay (配信遅延)]​ 項目と ​[Delivery delay unit (配信遅延単位)]​ 項目を設定します。

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

  2. [Destination (宛先)]​ 項目をキュー名 (​vars.destination​ など) に設定します。

  3. [Delivery delay (配信遅延)]​ 項目を ​${msgInitialDelay}​ に設定します。

  4. [Delivery delay unit (配信遅延単位)]​ 項目を ​[MILLISECONDS (ミリ秒)]​ に設定します。

「Publish」 設定画面で、「Delivery Delay (配信遅延)」 項目の値を設定し、「Delivery Delay Unit (配信遅延単位)」 項目を 「MILLISECONDS (ミリ秒)」 に設定する
Figure 5. Publish 操作の配信遅延の設定

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

<jms:publish  deliveryDelay="${msgInitialDelay}" deliveryDelayUnit="MILLISECONDS"
              destination="#[vars.destination]" config-ref="JMS_config"/>

応答宛先の設定

送信されたメッセージへの非同期応答が必要な場合、​Publish​ 操作を使用すると、​[Reply to (応答先)]​ 項目で任意の応答宛先を宣言できます。応答宛先は、JMS ヘッダーとしてメッセージのコンシューマーに渡されます。

次の例では、応答宛先を設定します。

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

  2. [Destination (宛先)]​ 項目をキュー名 (​vars.destination​ など) に設定します。

  3. [Reply to (応答先)]​ 項目を ​[Edit inline (インライン編集)]​ に設定します。

  4. [Destination name (宛先名)]​ 項目を ​${completionEventsDestination}​ に設定します。

  5. [Destination type (宛先種別)]​ 項目を ​[TOPIC (トピック)]​ に設定します。

「Publish」 設定画面で、「Reply To (応答先)」 を 「Edit inline (インライン編集)」 に設定し、「Destination name (宛先名)」 項目の名前を設定し、「Destination type (宛先種別)」 項目を 「TOPIC (トピック)」 に設定する。
Figure 6. Publish 操作の応答先の設定

XML エディターでは、​<jms:reply-to>​、​destination​、および ​destinationType​ の設定は次のように記述されます。

<jms:publish config-ref="JMS_config" destination="#[vars.invoiceProcessorDestination]">
    <jms:message>
        <jms:reply-to destination="${completionEventsDestination}" destinationType="TOPIC"/>
    </jms:message>
</jms:publish>

相関 ID の設定

Publish​ 操作では、​[Correlation ID (相関 ID)]​ 項目で送信メッセージの相関 ID を設定できます。

まず、メッセージのパブリッシュ時に相関 ID を送信するかどうかを設定する必要があります。送信する場合、​[Send correlation id (相関 ID を送信)]​ 項目を次のいずれかのオプションに設定します。

  • ALWAYS
    常にヘッダーを送信する

  • NEVER
    ヘッダーを送信しない

  • AUTO
    デフォルト値。アプリケーションの設定を使用する

次に、メッセージを送信するイベントの相関 ID を使用するか、メッセージビルダーで独自のカスタム相関 ID を設定できます。

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

  2. [Destination (宛先)]​ 項目をキュー名 (​attributes.headers.replyTo.destination​ など) に設定します。

  3. [Send correlation id (相関 ID を送信)]​ 項目を ​[ALWAYS (常時)]​ に設定します。

  4. [Correlation ID (相関 ID)]​ 項目を ​attributes.headers.correlationId​ に設定します。

「Publish」 設定画面で、「Send correlation ID (相関 ID を送信)」 項目を 「ALWAYS (常時)」 に設定し、「Correlation ID (相関 ID)」 項目をカスタム値に設定する
Figure 7. Publish 操作の相関 ID の設定

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

<jms:publish config-ref="JMS_config" sendCorrelationId="ALWAYS" destination="#[attributes.headers.replyTo.destination]">
    <jms:message correlationId="#[attributes.headers.correlationId]"/>
</jms:publish>

メッセージプロパティの設定

JMS メッセージで各種プロパティを使用して、他のメッセージングシステムとの互換性の確立やカスタムメッセージセレクターの作成などを行うことができます。プロパティの一部はよく知られた JMS 標準プロパティですが、その他にも実装やカスタムユーザー設定に基づくプロパティがあります。​Publish​ 操作では、これらのプロパティをすべてメッセージ内で直接設定できます。

ユーザープロパティの設定

送信メッセージのプロパティを設定する必要がある場合、メッセージ内で ​[Properties (プロパティ)]​ 項目を設定し、DataWeave を使用してマップのインライン宣言を行います。

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

  2. [Destination (宛先)]​ 項目をキュー名 (​${bridgeDestination}​ など) に設定します。

  3. [Destination type (宛先種別)]​ 項目を ​[TOPIC (トピック)]​ に設定します。

  4. [Body (本文)]​ 項目を ​"bridged_" ++ payload​ に設定します。

  5. [Properties (プロパティ)]​ 項目を次の DataWeave コードに設定します。

{
    AUTH_TYPE: 'jwt',
    AUTH_TOKEN: attributes.queryParams.token
}
「Publish」 設定画面で、「Body (本文)」 項目と 「Properties (プロパティ)」 項目を設定する
Figure 8. Publish 操作のプロパティの設定

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

<jms:publish config-ref="JMS_config" destination="${bridgeDestination}" destinationType="TOPIC">
    <jms:message>
        <jms:body>#["bridged_" ++ payload]</jms:body>
        <jms:properties>#[{
            AUTH_TYPE: 'jwt',
            AUTH_TOKEN: attributes.queryParams.token
        }]</jms:properties>
    </jms:message>
</jms:publish>

JMSX プロパティの設定

JMS 仕様には JMSX プロパティが含まれます。このプロパティは、メッセージに関するメタデータが含まれるよく知られたプロパティセットです。次の例では、メッセージの ​[JMSX Properties (JMSX プロパティ)]​ 項目でこのプロパティを設定します。

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

  2. [Destination (宛先)]​ 項目をキュー名 (​${bridgeDestination}​ など) に設定します。

  3. [Destination type (宛先種別)]​ 項目を ​[TOPIC (トピック)]​ に設定します。

  4. [Body (本文)]​ 項目を ​"bridged_" ++ payload​ に設定します。

  5. [JMSX Properties (JMSX プロパティ)]​ 項目を ​[Edit inline (インライン編集)]​ に設定します。

  6. [Jmsx group id (Jmsx グループ ID)]​ 項目を ​vars.currentGroup​ に設定します。

  7. [Jmsx user id (Jmsx ユーザー ID)]​ 項目を ​${username}​ に設定します。

「Publish」 設定画面で、「JMSX Properties (JMSX プロパティ)」 項目を 「Edit Inline (インライン編集)」 に設定し、「Jmsx group id (JMSX グループ ID)」 項目と 「Jmsx user id (JMSX ユーザー ID)」 項目を設定する
Figure 9. Publish 操作の JMSX プロパティの設定

XML エディターでは、​<jms:jmsx-properties>​、​jmsxGroupID​、および ​jmsxUserID​ の設定は次のように記述されます。

<jms:publish config-ref="JMS_config" destination="${bridgeDestination}" destinationType="TOPIC">
    <jms:message>
        <jms:body>#["bridged_" ++ payload]</jms:body>
        <jms:jmsx-properties jmsxGroupID="#[vars.currentGroup]" jmsxUserID="${username}"/>
    </jms:message>
</jms:publish>