JMS トランスポートでは、JMS メッセージの本文を含めるためにペイロードを必要とし、Mule のアウトバウンドプロパティを使用して JMS プロパティとヘッダーをカスタマイズしていました。新しい Mule 4 アプローチでは、JMS の「publish」操作で、入力パラメーターのみを使用してパブリッシュする JMS メッセージを完全にビルドします。
たとえば、本文にペイロードの一部のみを含めて優先度の高い JMS メッセージを送信し、そのメッセージをグループに関連付ける場合、次の手順を実行する必要があります。
<1>) transform を使用して、メッセージ本文となるものをペイロードに設定します。
<2>) 生成されたストリームを文字列に変換して、テキストメッセージとして送信します。
<3>) アウトバウンドメッセージプロパティにキーとして priority を設定し、JMSPriority を設定します。
<4>) アウトバウンドメッセージプロパティにキーとして JMSXGroupID を設定し、JMSXGroupID を設定します。
Mule 3 の例: 優先度が設定されたメッセージをグループの一部として送信
<flow name="JmsTransportOutbound">
<http:listener config-ref="HTTP_Listener_Configuration" path="/orders"/>
<dw:transform-message> (1)
<dw:set-payload><![CDATA[%dw 1.0
%output application/json
---
{
order_id: payload.id,
supplier: payload.warehouse
}]]></dw:set-payload>
</dw:transform-message>
<object-to-string-transformer/> (2)
<jms:outbound-endpoint queue="storage" connector-ref="Active_MQ">
<message-properties-transformer scope="outbound">
<add-message-property key="JMSXGroupID" value="#[message.inboundProperties."http.query.params".packageGroup]"/> (3)
<add-message-property key="priority" value="9"/> (4)
</message-properties-transformer>
</jms:outbound-endpoint>
</flow>
Mule 4 では JMS Connector と次の設定を使用して、同じ結果を得ることができます。
Mule 4 の例: 優先度が設定されたメッセージをグループの一部として送信
<flow name="JMSConnectorPublish">
<http:listener config-ref="HTTP_Listener_config" path="/orders"/>
(2)
<jms:publish config-ref="JMS_Config" destination="storage" priority="9"> (3)
<jms:message> (1)
<jms:body>#[output application/json ---
{
order_id: payload.id,
supplier: payload.warehouse
}]</jms:body>
<jms:jmsx-properties jmsxGroupID="#[attributes.queryParams.packageGroup]"/> (4)
</jms:message>
</jms:publish>
</flow>
1) メッセージの body はインラインで作成され、ペイロードには変更がないため、transform コンポーネントは必要ありません。
2) コネクタでは変換出力を自動的に処理できるので、object-to-string トランスフォーマーも削除されました。
3) 優先度は publish 操作のパラメーターとして設定され、ユーザーが正確なキーを知っている必要はありません。
4) グループはメッセージ JMSX プロパティの一部として設定され、ユーザーが正確なヘッダー名を知っている必要はありません。
要約すると、JMS トランスポートを使用する 3.x でメッセージをパブリッシュする場合、JMS メッセージの作成を設定するには、MuleMessage ペイロードとアウトバウンドプロパティを使用します。それにはトランスポートの機能についてより深い知識が必要でした。4.x の JMS Connector では、設定可能なすべての要素は、属するスコープのパラメーターとして公開されるため、すべての JMS 機能がより明確に公開されます。