Mule 4 の新しいアプローチでは、AMQP の 'publish' 操作に入力パラメーターのみを利用して、パブリッシュする AMQP メッセージのビルドを完成させます。
たとえば、本文にペイロードの一部のみが記載された、優先度の高い AMQP メッセージを送信し、このメッセージをグループに関連付ける場合、次の手順を実行する必要があります。
<1>) transform を使用して、メッセージ本文となるものをペイロードに設定します。
<2>) 生成されたストリームを文字列に変換して、テキストメッセージとして送信します。
<3>) AMQP プロパティに priority を、AMQP メッセージの優先度を設定するキーとして設定します。
Mule 3 の例: 優先度が設定されたメッセージをグループの一部として送信
<flow name="AmqpTransportOutbound">
<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)
<amqp:outbound-endpoint exchangeName="testExchange" connector-ref="AMQP_Connector" >
<message-properties-transformer scope="outbound">
<add-message-property key="priority" value="9"/> (3)
</message-properties-transformer>
</amqp:outbound-endpoint>
</flow>
Mule 4 でも、AMQP Connector を次のとおり設定すれば、同じ結果を得ることができます。
Mule 4 の例: 優先度が設定されたメッセージをグループの一部として送信
<flow name="AMQPConnectorPublish">
<http:listener config-ref="HTTP_Listener_config" path="/orders"/>
(2)
<amqp:publish config-ref="AMQP_Config" exchangeName="targetExchange">
<amqp:message> (1)
<amqp:body>#[output application/json ---
{
order_id: payload.id,
supplier: payload.warehouse
}]</amqp:body>
<amqp:properties priority="3"/> (3)
</amqp:message>
</amqp:publish>
</flow>
1) メッセージの body はインラインで作成され、ペイロードには変更がないため、transform コンポーネントは必要ありません。
2) コネクタが変換出力を自動的に処理できるため、object-to-string トランスフォーマーも排除されています。
3) 優先度は AmqpMessage 操作のプロパティとして設定され、ユーザーが正確なキーを把握している必要はありません。
上記をまとめると、3.x で AMQP トランスポートを使用してメッセージをパブリッシュするときは、AmqpMessage ペイロードとアウトバウンドプロパティを利用して AMQP メッセージの作成を設定するため、トランスポートがどのように機能するのかの詳しい知識が必要でした。4.x では AMQP Connector が、設定可能な各要素をその要素が属するスコープのパラメーターとして公開するため、AMQP のすべての機能がより明確な形で公開されます。