VM Connector のメッセージのパブリッシュとリスンの例 - Mule 4

次の例は、異なるフローによって受信されるメッセージをパブリッシュする方法を示しています。

  • 最初のフローでは受信 HTTP メッセージペイロードを受け入れ、​VM Publish​ 操作がメッセージを VM キューにパブリッシュします。

  • 2 番目のフローでは ​VM Listener​ ソースが同じ VM キューを介して前のフローからメッセージペイロードを受信します。

  • そのために、両方の操作で同じキューを参照することで、アクティブなリスナーがいないキューにメッセージを送信することによって引き起こされるメッセージの損失を防ぎます。

次のスクリーンショットは、この例の 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 (パス)]​ 項目を ​/json-here​ に設定します。

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

  5. [Connection (接続)]​ セクションで、次の値を入力します。

    • Protocol (プロトコル)
      HTTP (デフォルト)

    • Host (ホスト)
      All Interfaces [0.0.0.0] (default)

    • Port (ポート)
      8081

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

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

  8. VM Publish​ 操作を ​HTTP Listener​ ソースの右にドラッグします。
    この操作は、メッセージペイロードを VM キューでパブリッシュします。

  9. コネクタ設定の ​[Content (コンテンツ)]​ 項目で、値を ​payload.body​ に設定します。
    この項目により、DataWeave を使用して送信する値を作成できます。パラメーター値を指定しない場合は、ペイロード全体が送信されます。

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

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

  12. [Queue (キュー)]​ ウィンドウで、次の値を入力します。

    • Queue name (キュー名)
      myQueue

    • Queue type (キュー種別)
      TRANSIENT (デフォルト)

    • Max outstanding message (最大送信メッセージ数)​ ​o

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

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

次のスクリーンショットは、​[VM Config (VM 設定)]​ のグローバル要素設定を示しています。

「VM Config (VM 設定)」 のグローバル要素設定
Figure 2. [VM Config (VM 設定)] のグローバル要素設定

次のスクリーンショットは、​VM Publish​ 操作の画面設定を示しています。

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

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

VM リスンフローは前の VM Publish フローからの VM キューのメッセージペイロードをリスンし、メッセージを記録します。このフローにはメッセージソースとして ​VM Listener​ が含まれ、​VM Publish​ 操作で設定したのと同じ VM キューを参照します。リスンする側の処理は非同期で発生します。その結果についての通知は受信しません。

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

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

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

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

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

  5. 要求を ​http://127.0.0.1:8081/json-here​ に送信してアプリケーションをテストします。

次のスクリーンショットは、​VM Listener​ ソースの画面設定を示しています。

VM Listen ソース設定
Figure 4. VM Listen ソース設定

メッセージのパブリッシュとリスンの XML

この例のフローをすばやく Mule アプリケーションに読み込むには、次のコードを Studio XML エディターに貼り付けます。

<?xml version="1.0" encoding="UTF-8"?>

<mule 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/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:listener-config name="HTTP_Listener_config" doc:name="HTTP Listener config">
		<http:listener-connection host="0.0.0.0" port="8081" />
	</http:listener-config>
	<vm:config name="VM_Config" doc:name="VM Config">
		<vm:queues >
			<vm:queue queueName="myQueue" />
		</vm:queues>
	</vm:config>
	<flow name="vm-publishingFlow">
		<http:listener doc:name="Listener" config-ref="HTTP_Listener_config" path="/json-here"/>
		<vm:publish doc:name="Publish" config-ref="VM_Config" queueName="myQueue">
			<vm:content ><![CDATA[payload.body]]></vm:content>
		</vm:publish>
	</flow>
	<flow name="vm-listeningFlow" >
		<vm:listener queueName="myQueue" doc:name="Listener" config-ref="VM_Config"/>
		<logger level="INFO" doc:name="Logger" />
	</flow>
</mule>