mule - mule : Scatter Gather : 如果我们在 Scatter gather 组件中设置目标变量,如何聚合来自不同路由的变量?
问题描述
使用 Mule 4,Scatter Gather 组件,我将目标变量设置为“结果”。我还有两个变量
- firstVar :在 Scatter Gather 组件之外定义,但在一个路由内更新
- secondVariable :在 Scatter Gather 组件内部定义。
当我运行代码时,我希望在 Scatter Gather 完成后看到 firstVar(更新)、secondVariable 和结果。但我只看到 firstVar 的初始值。
观察:如果我删除目标变量结果,我也会看到 firstVar(更新)、secondVariable 和聚合的有效负载。
有人可以解释我做错了什么吗?
参考代码:
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core"
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/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd">
<flow name="ScatterGather-ExampleFlow"
doc:id="5dec6c32-4da7-4be0-91e1-26744e6e4761">
<http:listener doc:name="Listener"
doc:id="a75d1ddb-0481-45be-992d-39e397160257"
config-ref="HTTP_Listener_config" path="/api/scattergather" />
<logger level="INFO" doc:name="Logger"
doc:id="9bb44a1f-287f-415c-b19f-87798797cfa8"
message="Starting Scatter Gather Sample" />
<set-variable value='#["First Value"]'
doc:name="First Variable"
doc:id="1eb7430b-f6a8-4366-8594-8f76479148ab" variableName="firstVar" />
<scatter-gather doc:name="Scatter-Gather"
doc:id="ef921649-8269-46ba-b38e-8e55f2694368" target="result">
<route>
<ee:transform doc:name="Transform Message"
doc:id="c5b2717c-5917-4641-aa4c-2283614cc4af">
<ee:message>
<ee:set-payload><![CDATA[%dw 2.0 output application/java
--- payload]]></ee:set-payload>
</ee:message>
<ee:variables>
<ee:set-variable variableName="firstVar"><![CDATA[%dw 2.0 output application/java ---
"updated First Value"]]></ee:set-variable>
</ee:variables>
</ee:transform>
<set-payload value='#["First route PAyload"]'
doc:name="Set Payload"
doc:id="8c479443-dd94-410e-9346-fedb7c0d3d71" />
</route>
<route>
<set-variable value='"secondValue"'
doc:name="SecondVariable"
doc:id="6f78c3a7-ae00-4693-93ca-da98217d36d4"
variableName="secondVariable" />
<set-payload value='#["2nd routePayload"]'
doc:name="Set Payload"
doc:id="aad2f059-2a35-4c29-85d7-45e33f317e59" />
</route>
</scatter-gather>
<logger level="INFO" doc:name="Logger"
doc:id="d03caeac-41e3-4dc9-8b67-de1da841011c" message="#[vars]" />
</flow>
</mule>
解决方案
我猜这与分配给目标变量的事件被丢弃有关。这可能是意料之中的。该事件包含消息/有效负载和变量。使用目标仅将生成的有效负载分配给变量。修改后的事件的其余部分将丢失。
我建议使用将所有需要的数据存储为附加属性的有效负载。您可以稍后使用 DataWeave 从负载的其余部分提取属性。
推荐阅读
- python - 从 Pandas Dataframe 中的列表中提取元组
- windows - 如何在 Select-String 中使用正则表达式开头的行?
- java - 如何使用 Faster xml 遍历具有相同键但值不同的 Json 数组
- c - 如何用字符串的地址将小写字母替换为大写?在 c
- android - 新安装的 react-native 应用程序构建失败
- django - 配置不当的循环导入错误 Django2 Python3
- heap-memory - 查询完成后如何在 apache Drill 上释放堆内存?
- node.js - NestJS - 从其他服务创建业务对象
- dns - 为 Google 应用程序制造商设置域名
- python - 如果 heapify(x) 需要 O(n) heappush() 怎么能需要 O(log n)?