VM Connector のメッセージ属性の伝播の例 - Mule 4

次の例では、メッセージペイロードを介して VM キューからメッセージ属性を伝播する方法を示しています。最初のフローでは受信 HTTP メッセージ属性を受け入れ、さらに独自のカスタム属性を作成して、これらの両方の属性をメッセージペイロードに追加しているため、​VM Publish​ 操作でメッセージを VM キューにパブリッシュできます。2 番目のフローでは ​VM Listener​ ソースが前のフローからメッセージペイロードを受信し、独自のメッセージ属性を設定して、最後にメッセージペイロードがオブジェクトストアに保存されています。

次のスクリーンショットは、この例の Anypoint Studio アプリケーションフローを示しています。

VM Connector のフロー例
Figure 1. VM Connector のメッセージ属性の伝播フロー

VM パブリッシュフローを作成する

VM パブリッシュフローでは最初に受信 HTTP メッセージ属性をリスンし、メッセージ属性を JSON 構造メッセージに変換します。最後に、​VM Publish​ 操作がメッセージを VM キューでパブリッシュします。

VM パブリッシュフローを作成する手順は、次のとおりです。

  1. Studio で新しい Mule プロジェクトを作成します。

  2. [Mule Palette (Mule パレット)]​ ビューで、​HTTP Listener​ ソースを選択してキャンバスにドラッグします。
    このソースは受信 HTTP メッセージ属性をリスンします。

  3. [HTTP Listener]​ 設定画面で、​[Path (パス)]​ 項目を ​/message​ に設定します。

  4. [Connector configuration (コネクタ設定)]​ 項目の横にあるプラス記号 (+) をクリックして、アプリケーション内の ​HTTP リスナ​のすべてのインスタンスで使用できるグローバル要素を設定します。

  5. [Connection (接続)]​ セクションで ​[Protocol (プロトコル)]​ を ​HTTP (Default)​ に、​[Host (ホスト)]​ を ​All Interfaces [0.0.0.0] (default)​ に、​[Port (ポート)]​ を ​8081​ に設定します。

  6. [Base path (ベースパス)]​ を ​/publish​ に設定します。

  7. [Test Connection (接続をテスト)]​ をクリックして、Mule が指定されたサーバに接続できることを確認します。

  8. [OK]​ をクリックします。

  9. Transform Message​ コンポーネントを ​[HTTP Listener]​ の右にドラッグします。
    このコンポーネントは受信 HTTP メッセージ属性を JSON 構造に変換します。この構造には ​listenerPath​ 属性と ​method​ 属性の他、新しいカスタム ​sizeAttribute​ 属性が含まれます。

  10. Transform Message​ コンポーネントの ​[Output Payload (出力ペイロード)]​ スクリプトビューで、次の DataWeave コードを使用して ​listenerPath​ 属性と ​method​ 属性を定義します。

%dw 2.0
output application/json
---
{
listenerPath: attributes.listenerPath,
method: attributes.method
}
  1. Transform Message​ コンポーネントの ​[Output Attributes (出力属性)]​ スクリプトビューで、次の DataWeave コードを使用して新しいカスタム ​sizeAttribute​ 属性を定義します。

%dw 2.0
output application/json
---
{
sizeAttribute: sizeOf(attributes.listenerPath) + sizeOf(attributes.method)
}
  1. [VM Publish]​ 操作を ​Transform Message​ コンポーネントの右にドラッグします。
    この操作は、作成された JSON メッセージを VM キューでパブリッシュします。

  2. [VM Publish]​ 設定画面で、​[Connector configuration (コネクタ設定)]​ 項目の横にあるプラス記号 (+) をクリックして、VM キューのグローバル要素を設定します。

  3. [VM Config (VM 設定)]​ ウィンドウで、​[Queues (キュー)]​ に ​Edit inline​ を選択します。

  4. [Queue (キュー)]​ ウィンドウで、​[Queue name (キュー名)]​ を ​testqueue1​ に、​[Queue type (キュー種別)]​ を ​TRANSIENT (Default)​ に、​[Max outstanding message (最大送信メッセージ数)]​ を ​o​ に設定します。

  5. [Finish (完了)]​ をクリックします。

  6. [OK]​ をクリックします。

Studio での ​[VM Config (VM 設定)]​ のグローバル要素設定は次のようになります。

[VM Config (VM 設定)] のグローバル要素設定
Figure 2. [VM Config (VM 設定)] のグローバル要素設定
  1. [VM Publish]​ 設定画面の ​[General (一般)] > [Content (コンテンツ)]​ 項目で、次の DataWeave コードを定義します。

%dw 2.0
output application/json
---
{'listenerPath': payload.listenerPath, 'method': payload.method, 'messageSize': attributes.sizeAttribute }

Studio での ​VM Publish​ 操作設定は次のようになります。

VM Publish 操作設定
Figure 3. VM Publish 操作設定

VM リスンフローを作成する

VM リスンフローは前の VM Publish フローからの VM キューの受信メッセージ属性をリスンし、​VM Listener​ ソースを通じて独自の属性を設定します。最後に、メッセージペイロードをオブジェクトストアに保存します。

VM リスンフローを作成する手順は、次のとおりです。

  1. [Mule Palette (Mule パレット)]​ ビューで、​VM Listener​ ソースを選択してキャンバスの最初の VM Publish フローの下にドラッグします。
    このソースは前のフローからの受信メッセージ属性をリスンします。

  2. [VM Listener]​ 設定画面で、​[Connector configuration (コネクタ設定)]​ 項目の横にあるプラス記号 (+) をクリックして、VM Publish フローで作成した VM キュー設定を選択します。

Studio での ​VM Listener​ ソース設定は次のようになります。

VM Listener ソース設定
Figure 4. VM Listener ソース設定
  1. Logger​ コンポーネントを ​VM Listener​ の右にドラッグします。

  2. [Logger]​ 設定画面で、​[Message (メッセージ)]​ 項目を ​payload​ に設定します。

  3. 別の ​Logger​ コンポーネントを最初の ​Logger​ コンポーネントの右にドラッグします。

  4. [Logger]​ 設定画面で、​[Message (メッセージ)]​ 項目を ​'VM message attributes: queue name ' ++ attributes.queueName as String​ に設定します。

  5. [ObjectStore Store]​ 操作を 2 番目の ​Logger​ コンポーネントの右にドラッグします。
    この操作は、受信した ​'method':'listenerPath'​ ペア属性をオブジェクトストアに保存します。

  6. [ObjectStore Store]​ 設定画面で、​[Display Name (表示名)]​ 項目を ​Add Http Request​ に設定します。

  7. [General (一般)]​ セクションで、​[Key (キー)]​ を ​payload.method​ に、​[Value (値)]​ を ​payload.listenerPath​ に設定します。

  8. [Object Store (オブジェクトストア)]​ 項目の横にあるプラス記号をクリックし、グローバルオブジェクトストア設定を定義します。

  9. デフォルト値を設定して、​[OK]​ をクリックします。

  10. プロジェクトを保存して、アプリケーションを実行します。

  11. 要求を ​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>