Flex Gateway新着情報
Governance新着情報
Monitoring API ManagerMule 3 と Mule 4 の Scatter-Gather ルーターでの最も重要な変更は、異なるルートの結果をまとめるために使用される AggregationStrategy で行われました。集約ロジックで Java クラスを提供する代わりに、DataWeave 変換で集約を実行できます。
Scatter-Gather から返されるペイロードは、メッセージのコレクションで、各メッセージは各ルートの結果です。それらのメッセージには DataWeave を使用してアクセスできます。
これは、aggregation strategy (集約戦略) がある Java クラスを参照する custom-aggregation-strategy 要素を使用した Mule 3 の Scatter-Gather です。
<scatter-gather doc:name="Scatter-Gather">
<custom-aggregation-strategy class="com.example.poc.CustomSGAggregationStrategy"/>
<processor-chain>
...
</processor-chain>
<processor-chain>
...
</processor-chain>
</scatter-gather>
<logger message="#[payload]" level="INFO" doc:name="Logger"/>
aggregation strategy (集約戦略) の実装は次のとおりです。
package com.example.poc;
import ...
public class CustomSGAggregationStrategy implements AggregationStrategy {
@Override
public MuleEvent aggregate(AggregationContext context) throws MuleException {
StringBuilder responseBuilder = new StringBuilder();
MuleEvent result = null;
ArrayList < MarketRate > marketRates = new ArrayList < > ();
for (MuleEvent event: context.collectEventsWithoutExceptions()) {
String response = (String) event.getMessage().getPayload();
String[] spiltResponse = StringUtils.split(response, ",");
MarketRate marketRate = new MarketRate();
marketRate.setEvent(event);
marketRate.setMarketName(spiltResponse[0]);
marketRate.setMarketRate(new Integer(spiltResponse[1]));
marketRates.add(marketRate);
System.out.println(marketRate);
}
Collections.sort(marketRates);
result = DefaultMuleEvent.copy(marketRates.get(0).getEvent());
result.getMessage().setPayload(marketRates.get(0).toString());
return result;
}
}
Mule 4 では Java クラスが削除され、フロー要素は次のようになります。
<scatter-gather doc:name="Scatter-Gather">
<route>
...
</route>
<route>
...
</route>
</scatter-gather>
<ee:transform>
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output text/plain
---
(payload map ((response, index) -> (response.payload splitBy(','))[1]) orderBy ((rate, index) -> rate))[0]
]]]></ee:set-payload>
</ee:message>
</ee:transform>
<logger message="#[payload]" level="INFO" doc:name="Logger"/>
Java ではなく、DataWeave で CustomSGAggregationStrategy のロジックを複製する ee:transform 要素に留意してください。