Flex Gateway新着情報
Governance新着情報
Monitoring API Managerこの操作では、新しい JMS メッセージを作成して、指定した宛先 (キューまたはトピック) に送信できます。メッセージのコンテンツだけではなく、必要なヘッダーもすべて設定できます。
デフォルトでは、コネクタはペイロードに含まれるすべての内容をパブリッシュします。
<ibm-mq:publish destination="invoiceQueue" config-ref="IBM_MQ_config"/>
ペイロードの形式が正しくなく、変換が必要な場合はどうすればよいでしょうか。この場合は、publish
操作の前に DataWeave トランスフォーマーを配置できますが、メッセージのペイロードが変更されるため、publish
に続く操作に影響が出ることがあります。
この不要な影響を回避するには、publish
操作の内部にトランスフォーマーを配置します。
<ibm-mq:publish destination="invoiceQueue" config-ref="IBM_MQ_config">
<ibm-mq:message>
<ibm-mq:body>#[%dw 2.0
output application/json
---
payload.payments
]</ibm-mq:body>
</ibm-mq:message>
</ibm-mq:publish>
これで、トランスフォーマーによってパブリッシュされるコンテンツが生成される一方で、送信中のメッセージに対する副作用は発生しません。
publish
操作は、特定のトピックにメッセージをパブリッシュするためにも使用できます。
操作とメッセージの設定はすべて同じですが、destinationType
パラメーターで宛先を TOPIC
として宣言する必要があります。
上記と同じ例で、メッセージをキューに送信するのではなくトピックにパブリッシュするには、次のように定義します。
<ibm-mq:publish destination="invoiceEvents" destinationType="TOPIC" config-ref="IBM_MQ_config">
<ibm-mq:message>
<ibm-mq:body>#[%dw 2.0
output application/json
---
payload.payments
]</ibm-mq:body>
</ibm-mq:message>
</ibm-mq:publish>
各 JMS メッセージにはヘッダーがあり、メッセージの存続期間や優先度などのメタデータを渡すことができます。パブリッシュされるメッセージに関するメタデータは、publish
操作のパラメーターで設定できます。
優先キューを実装するには、一部のメッセージに対して、デフォルト以外の優先度を割り当てる必要があります。これは、操作で priority
パラメーターを使用して行います。
<ibm-mq:publish priority="#[attributes.queryParams.priority]" destination="priorityQueue" config-ref="IBM_MQ_config"/>
パブリッシュされるすべての JMS メッセージには、メッセージがコンシューム可能な状態を維持する存続期間を宣言した timeToLive ヘッダーがあり、この期間が過ぎるとメッセージは削除されます。publish
操作の timeToLive
パラメーターおよび timeToLiveUnit
パラメーターにより、パブリッシュされる各メッセージの JMS ヘッダーの値を設定できます。
<ibm-mq:publish timeToLive="#[vars.timeToLive]" timeToLiveUnit="SECONDS"
destination="#[vars.destination]" config-ref="IBM_MQ_config"/>
JMS 2.0 を使用している場合は、メッセージの deliveryDelay
を設定することで、メッセージがコンシューマーに公開されるまでの待ち時間を設定できます。
<ibm-mq:publish deliveryDelay="${msgInitialDelay}" deliveryDelayUnit="MILLISECONDS"
destination="#[vars.destination]" config-ref="IBM_MQ_config"/>
送信するメッセージに対する非同期の応答が必要な場合は、JMS の publish
操作で任意の reply-to
宛先を宣言できます。
この宛先は、JMS ヘッダーでメッセージのコンシューマーに渡され、応答の送信先となります。
reply-to
宛先を宣言するには、次のようにメッセージの定義に追加します。
<ibm-mq:publish config-ref="IBM_MQ_config" destination="#[vars.invoiceProcessorDestination]">
<ibm-mq:message>
<ibm-mq:reply-to destination="${completionEventsDestination}" destinationType="TOPIC"/>
</ibm-mq:message>
</ibm-mq:publish>
publish
操作では、送信メッセージの correlationId
を設定できます。
最初に、sendCorrelationId
パラメーターを使用してメッセージをパブリッシュするときに correlationId
を送信するかどうかを設定する必要があります。
このパラメーターは、ALWAYS
(常にヘッダーを送信する)、NEVER
(ヘッダーを送信しない)、または AUTO
(デフォルト、アプリケーション設定を使用する) に設定できます。
次に、メッセージを送信するイベントの correlationId
を使用するか、またはメッセージビルダーでカスタム correlationId
を設定できます。
<ibm-mq:publish config-ref="IBM_MQ_config" sendCorrelationId="ALWAYS" destination="#[attributes.headers.replyTo.destination]">
<ibm-mq:message correlationId="#[attributes.headers.correlationId]"/>
</ibm-mq:publish>
すべての JMS メッセージではプロパティを設定できます。プロパティには、他のメッセージングシステムとの互換性を指定したり、カスタムメッセージセレクターを作成したりと、いろいろな使い道があります。
プロパティの一部はよく知られた JMS 標準プロパティですが、その他にも実装やカスタムユーザー設定に依存するプロパティがあります。publish
操作では、これらのプロパティをすべてメッセージ内で直接設定できます。
送信メッセージのプロパティを設定するのに必要な作業は、メッセージ内で properties
要素を使用して、DataWeave でマップのインライン宣言を行うだけです。
<ibm-mq:publish config-ref="IBM_MQ_config" destination="${bridgeDestination}" destinationType="TOPIC">
<ibm-mq:message>
<ibm-mq:body>#["bridged_" ++ payload]</ibm-mq:body>
<ibm-mq:properties>#[{
AUTH_TYPE: 'jwt'
AUTH_TOKEN: attributes.queryParams.token
}]</ibm-mq:properties>
</ibm-mq:message>
</ibm-mq:publish>
JMSX プロパティは、JMS 仕様で定義されているよく知られたプロパティセットで、メッセージに関するメタデータを指定します。これらのプロパティを設定するには、メッセージ要素の一部としてインラインで宣言します。
<ibm-mq:publish config-ref="IBM_MQ_config" destination="${bridgeDestination}" destinationType="TOPIC">
<ibm-mq:message>
<ibm-mq:body>#["bridged_" ++ payload]</ibm-mq:body>
<ibm-mq:jmsx-properties jmsxGroupID="#[vars.currentGroup]" jmsxUserID="${username}"/>
</ibm-mq:message>
</ibm-mq:publish>