対象変数への Enricher の移行

Mule 3 の Message Enricher とその機能は、Mule 4 で ​target​ パラメーターに置き換わります。Enricher では、メッセージプロセッサーのグループを実行し、現在のメッセージへの副作用がなく、出力を変数にリダイレクトすることができました。Mule 4 では、すべての non-void の操作 (​<flow-ref>​、​<http:request>​、​<db:select>​ など) には ​target​ パラメーターと ​targetValue​ パラメーターが含まれ、各操作の出力を変数 (​myVar​ など) にリダイレクトできます。その後、Mule フローのその他のコンポーネントは、DataWeave セレクター (​vars.myVar​ など) を使用してそのデータにアクセスできます。

HTTP 要求から発生し、第 3 のシステムにリダイレクトする必要があるメッセージを考えてください。これに、​stateLookup​ と呼ばれる 2 次フローを使用して抽出される ​state​ クエリパラメーターを追加します。元のペイロードまたはヘッダーを失いたくないので、元のメッセージに影響を及ぼさずにこの値を抽出する必要があります。Enricher は (郵便番号が含まれている) 現在のメッセージを使用してエンリッチメントリソースをコールアウトし、その結果でメッセージをエンリッチします。

Mule 3 の例
<flow name="orderProcessingFlow">
   <http:listener .../>
   <enricher target="#[variable:state]">
       <flow-ref name="stateLookup"/>
   </enricher>
  <http:request config-ref="config" path="state" method="POST">
    <http:request-builder>
        <http:query-param paramName="state" value="#[flowVars.state]" />
    </http:request-builder>
  </http:request>
</flow>

Mule 4 では、​<flow-ref>​ 操作で ​target​ パラメーターを使用できます。

Mule 4 の例
<flow name="orderProcessingFlow">
  <http:listener .../>
  <flow-ref name="stateLookup" target="state" />
  <http:request config-ref="config" path="state" method="POST">
    <http:query-params>
      #[{'state' : vars.state}]
    </http:query-params>
  </http:request>
</flow>

複数の Enricher の移行

Mule 4 では、操作ごとに 1 つの ​target​ 変数のみを設定できます。Mule 3 アプリケーションで複数の Enricher を設定している場合、Mule 4 では ​Set Variable​ コンポーネントを使用して同じ動作を実行できます。

Mule 3 の例
<flow name="orderProcessingFlow">
	...
	<enricher doc:name="order-enricher">
	    <flow-ref name="validator-flow" doc:name="validator-flow"/>
	    <enrich source="#[payload.validation.result]" target="#[flowVars.validationResult]"/>
	    <enrich source="#[payload.validation.code]" target="#[flowVars.validationCode"/>
	</enricher>
	...
</flow>
Mule 4 の例
<flow name="orderProcessingFlow">
  ...
  <flow-ref name="validator-flow" target="validation" />
  <set-variable value="#[vars.validation.result]" variableName="validationResult"/>
  <set-variable value="#[vars.validation.code]" variableName="validationCode"/>
  ...
</flow>

関連情報