次の例では、メッセージペイロードを介して VM キューからメッセージ属性を伝播する方法を示しています。最初のフローでは受信 HTTP メッセージ属性を受け入れ、さらに独自のカスタム属性を作成して、これらの両方の属性をメッセージペイロードに追加しているため、VM Publish 操作でメッセージを VM キューにパブリッシュできます。2 番目のフローでは VM Listener ソースが前のフローからメッセージペイロードを受信し、独自のメッセージ属性を設定して、最後にメッセージペイロードがオブジェクトストアに保存されています。
次のスクリーンショットは、この例の Anypoint Studio アプリケーションフローを示しています。
VM パブリッシュフローを作成する
VM パブリッシュフローでは最初に受信 HTTP メッセージ属性をリスンし、メッセージ属性を JSON 構造メッセージに変換します。最後に、VM Publish 操作がメッセージを VM キューでパブリッシュします。
VM パブリッシュフローを作成する手順は、次のとおりです。
-
Studio で新しい Mule プロジェクトを作成します。
-
[Mule Palette (Mule パレット)] ビューで、HTTP Listener ソースを選択してキャンバスにドラッグします。
このソースは受信 HTTP メッセージ属性をリスンします。 -
[HTTP Listener] 設定画面で、[Path (パス)] 項目を
/message に設定します。 -
[Connector configuration (コネクタ設定)] 項目の横にあるプラス記号 (+) をクリックして、アプリケーション内の HTTP リスナーのすべてのインスタンスで使用できるグローバル要素を設定します。
-
[Connection (接続)] セクションで [Protocol (プロトコル)] を
HTTP (Default) に、[Host (ホスト)] を All Interfaces [0.0.0.0] (default) に、[Port (ポート)] を 8081 に設定します。 -
[Base path (ベースパス)] を
/publish に設定します。 -
[Test Connection (接続をテスト)] をクリックして、Mule が指定されたサーバーに接続できることを確認します。
-
[OK] をクリックします。
-
Transform Message コンポーネントを [HTTP Listener] の右にドラッグします。
このコンポーネントは受信 HTTP メッセージ属性を JSON 構造に変換します。この構造には listenerPath 属性と method 属性の他、新しいカスタム sizeAttribute 属性が含まれます。 -
Transform Message コンポーネントの [Output Payload (出力ペイロード)] スクリプトビューで、次の DataWeave コードを使用して
listenerPath 属性と method 属性を定義します。
%dw 2.0
output application/json
---
{
listenerPath: attributes.listenerPath,
method: attributes.method
}
-
Transform Message コンポーネントの [Output Attributes (出力属性)] スクリプトビューで、次の DataWeave コードを使用して新しいカスタム
sizeAttribute 属性を定義します。
%dw 2.0
output application/json
---
{
sizeAttribute: sizeOf(attributes.listenerPath) + sizeOf(attributes.method)
}
-
[VM Publish] 操作を Transform Message コンポーネントの右にドラッグします。
この操作は、作成された JSON メッセージを VM キューでパブリッシュします。 -
[VM Publish] 設定画面で、[Connector configuration (コネクタ設定)] 項目の横にあるプラス記号 (+) をクリックして、VM キューのグローバル要素を設定します。
-
[VM Config (VM 設定)] ウィンドウで、[Queues (キュー)] に
Edit inline を選択します。 -
[Queue (キュー)] ウィンドウで、[Queue name (キュー名)] を
testqueue1 に、[Queue type (キュー種別)] を TRANSIENT (Default) に、[Max outstanding message (最大送信メッセージ数)] を o に設定します。 -
[Finish (完了)] をクリックします。
-
[OK] をクリックします。
Studio での [VM Config (VM 設定)] のグローバル要素設定は次のようになります。
-
[VM Publish] 設定画面の [General (一般)] > [Content (コンテンツ)] 項目で、次の DataWeave コードを定義します。
%dw 2.0
output application/json
---
{'listenerPath': payload.listenerPath, 'method': payload.method, 'messageSize': attributes.sizeAttribute }
Studio での VM Publish 操作設定は次のようになります。
VM リスンフローを作成する
VM リスンフローは前の VM Publish フローからの VM キューの受信メッセージ属性をリスンし、VM Listener ソースを通じて独自の属性を設定します。最後に、メッセージペイロードをオブジェクトストアに保存します。
VM リスンフローを作成する手順は、次のとおりです。
-
[Mule Palette (Mule パレット)] ビューで、VM Listener ソースを選択してキャンバスの最初の VM Publish フローの下にドラッグします。
このソースは前のフローからの受信メッセージ属性をリスンします。 -
[VM Listener] 設定画面で、[Connector configuration (コネクタ設定)] 項目の横にあるプラス記号 (+) をクリックして、VM Publish フローで作成した VM キュー設定を選択します。
Studio での VM Listener ソース設定は次のようになります。
-
Logger コンポーネントを VM Listener の右にドラッグします。
-
[Logger] 設定画面で、[Message (メッセージ)] 項目を
payload に設定します。 -
別の Logger コンポーネントを最初の Logger コンポーネントの右にドラッグします。
-
[Logger] 設定画面で、[Message (メッセージ)] 項目を
'VM message attributes: queue name ' ++ attributes.queueName as String に設定します。 -
[ObjectStore Store] 操作を 2 番目の Logger コンポーネントの右にドラッグします。
この操作は、受信した 'method':'listenerPath' ペア属性をオブジェクトストアに保存します。 -
[ObjectStore Store] 設定画面で、[Display Name (表示名)] 項目を
Add Http Request に設定します。 -
[General (一般)] セクションで、[Key (キー)] を
payload.method に、[Value (値)] を payload.listenerPath に設定します。 -
[Object Store (オブジェクトストア)] 項目の横にあるプラス記号をクリックし、グローバルオブジェクトストア設定を定義します。
-
デフォルト値を設定して、[OK] をクリックします。
-
プロジェクトを保存して、アプリケーションを実行します。
-
要求を
http://127.0.0.1:8081/publish/message に送信してアプリケーションをテストします。
VM キューを通じたメッセージ属性の伝播の XML
この例のフローをすばやく Mule アプリケーションに読み込むには、次のコードを Studio XML エディターに貼り付けます。
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:sockets="http://www.mulesoft.org/schema/mule/sockets"
xmlns:os="http://www.mulesoft.org/schema/mule/os" xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core"
xmlns:vm="http://www.mulesoft.org/schema/mule/vm"
xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="
http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/vm http://www.mulesoft.org/schema/mule/vm/current/mule-vm.xsd
http://www.mulesoft.org/schema/mule/os http://www.mulesoft.org/schema/mule/os/current/mule-os.xsd
http://www.mulesoft.org/schema/mule/sockets http://www.mulesoft.org/schema/mule/sockets/current/mule-sockets.xsd">
<http:listener-config name="HTTP_Listener_config" doc:name="HTTP Listener config" basePath="/publish" >
<http:listener-connection host="0.0.0.0" port="8081" />
</http:listener-config>
<vm:config name="VM_Config" doc:name="VM Config">
<vm:connection />
<vm:queues>
<vm:queue queueName="testQueue1" queueType="TRANSIENT"/>
</vm:queues>
</vm:config>
<os:object-store name="Object_store" doc:name="Object store"/>
<flow name="vm-publishFlow" >
<http:listener doc:name="Listener" config-ref="HTTP_Listener_config" path="/message"/>
<ee:transform doc:name="Transform Message">
<ee:message>
<ee:set-payload><![CDATA[%dw 2.0
output application/json
---
{
listenerPath: attributes.listenerPath,
method: attributes.method
}
]]>
</ee:set-payload>
<ee:set-attributes><![CDATA[%dw 2.0
output application/json
---
{
sizeAttribute: sizeOf(attributes.listenerPath) + sizeOf(attributes.method)
}
]]></ee:set-attributes>
</ee:message>
</ee:transform>
<vm:publish doc:name="Publish" config-ref="VM_Config" queueName="testQueue1">
<vm:content ><![CDATA[#[%dw 2.0
output application/json
---
{'listenerPath': payload.listenerPath, 'method': payload.method, 'messageSize': attributes.sizeAttribute }]]]></vm:content>
</vm:publish>
</flow>
<flow name="vm-listenerFlow" >
<vm:listener doc:name="Listener" config-ref="VM_Config" queueName="testQueue1"/>
<logger level="INFO" doc:name="Logger" message="payload"/>
<logger level="INFO" doc:name="Logger" message="'VM message attributes: queue name ' ++ attributes.queueName as String"/>
<os:store doc:name=" Add Http Request" key="payload.method" objectStore="Object_store">
<os:value ><![CDATA[payload.listenerPath]]></os:value>
</os:store>
</flow>
</mule>