Mule 为每个循环聚合来自的数据
场景-将csv文件转换为json格式,获取每个json元素并进行get请求api调用。我在一个for-each循环序列中这样做。我得到一个json响应(从每个响应中提取eventId和成本)。现在,我希望将所有这些响应合并到主标题列表下,并生成更大的json负载 例如:Mule 为每个循环聚合来自的数据,mule,Mule,场景-将csv文件转换为json格式,获取每个json元素并进行get请求api调用。我在一个for-each循环序列中这样做。我得到一个json响应(从每个响应中提取eventId和成本)。现在,我希望将所有这些响应合并到主标题列表下,并生成更大的json负载 例如: { "listings": [ { "eventId":"8993478", "cost":34 }, {
{
"listings": [
{
"eventId":"8993478",
"cost":34
},
{
"eventId":"xxxxxyyyy",
"cost":zz
},
]
}
如何对所有迭代条目执行此操作。我可以对单个条目执行此操作(使用groovy脚本)。您可以在
之前为每个
循环定义一个变量,作为一个空列表,其中包含:
<set-variable variableName="listings" value="#[[]]" />
在前面的代码片段中,我使用变量flowVars.iterationMap
来表示每次迭代时生成的映射
最后,如果需要,您可以在每个循环的之后添加一个设置有效负载
转换器:
<set-payload value="#[flowVars.listings]" />
HTH,Marcos您可以在每个
循环的前面定义一个变量,作为一个空列表,其中包含:
<set-variable variableName="listings" value="#[[]]" />
在前面的代码片段中,我使用变量flowVars.iterationMap
来表示每次迭代时生成的映射
最后,如果需要,您可以在每个
循环的之后添加一个设置有效负载
转换器:
<set-payload value="#[flowVars.listings]" />
HTH,Marcos您可以在每个
循环的前面定义一个变量,作为一个空列表,其中包含:
<set-variable variableName="listings" value="#[[]]" />
在前面的代码片段中,我使用变量flowVars.iterationMap
来表示每次迭代时生成的映射
最后,如果需要,您可以在每个
循环的之后添加一个设置有效负载
转换器:
<set-payload value="#[flowVars.listings]" />
HTH,Marcos您可以在每个
循环的前面定义一个变量,作为一个空列表,其中包含:
<set-variable variableName="listings" value="#[[]]" />
在前面的代码片段中,我使用变量flowVars.iterationMap
来表示每次迭代时生成的映射
最后,如果需要,您可以在每个
循环的之后添加一个设置有效负载
转换器:
<set-payload value="#[flowVars.listings]" />
嗯,Marcos您可以使用批处理模块,但您必须重写稍微不同的逻辑。例如,您将无法再使用Marcos建议的聚合flowVar。相反,您需要使用一个固定大小的batch:commit块(实际上在许多方面都会更好,例如,您可以开始向远程API发送批量,同时仍在后台处理一些其他记录) 您可以使用批处理模块,但您必须将此逻辑重写得稍微不同一点。例如,您将无法再使用Marcos建议的聚合flowVar。相反,您需要使用一个固定大小的batch:commit块(实际上在许多方面都会更好,例如,您可以开始向远程API发送批量,同时仍在后台处理一些其他记录) 您可以使用批处理模块,但您必须将此逻辑重写得稍微不同一点。例如,您将无法再使用Marcos建议的聚合flowVar。相反,您需要使用一个固定大小的batch:commit块(实际上在许多方面都会更好,例如,您可以开始向远程API发送批量,同时仍在后台处理一些其他记录) 您可以使用批处理模块,但您必须将此逻辑重写得稍微不同一点。例如,您将无法再使用Marcos建议的聚合flowVar。相反,您需要使用一个固定大小的batch:commit块(实际上在许多方面都会更好,例如,您可以开始向远程API发送批量,同时仍在后台处理一些其他记录) …我喜欢Marco的答案,它对我的用例非常有效
只需在流变量中创建一个数组,并在ForEach作用域中对该数组使用add()方法即可
OP的后续问题很好。这促使我使用建议的方法进行替代测试。在此处查看我的两个流程:
<flow name="sampleAggregatorFlow" doc:description="this is a simple demo that shows how to aggregate results into an accumulator array">
<http:listener config-ref="manage-s3-api-httpListenerConfig" path="/aggregate" allowedMethods="GET" doc:name="HTTP"/>
<set-payload value="#[['red','blue','gold']]" doc:name="Set Payload"/>
<set-variable variableName="accumulator" value="#[[]]" doc:name="accumulator"/>
<foreach doc:name="For Each">
<expression-transformer expression="#[flowVars.accumulator.add(payload)]" doc:name="addEm"/>
</foreach>
<set-payload value="#[flowVars.accumulator]" doc:name="Set Payload"/>
<json:object-to-json-transformer doc:name="Object to JSON"/>
</flow>
<flow name="Copy_of_sampleAggregatorFlow" doc:description="this is a simple demo that shows how to aggregate results into an accumulator array">
<http:listener config-ref="manage-s3-api-httpListenerConfig" path="/aggregate2" allowedMethods="GET" doc:name="Copy_of_HTTP"/>
<set-payload value="#[['red','blue','gold']]" doc:name="Copy_of_Set Payload"/>
<set-variable variableName="accumulator" value="#[new java.util.ArrayList()]" doc:name="Copy_of_accumulator"/>
<foreach doc:name="Copy_of_For Each">
<expression-transformer expression="#[flowVars.accumulator.add(payload)]" doc:name="Copy_of_addEm"/>
</foreach>
<set-payload value="#[flowVars.accumulator]" doc:name="Copy_of_Set Payload"/>
<json:object-to-json-transformer doc:name="Copy_of_Object to JSON"/>
</flow>
2017年12月26日,使用Anypoint Studio 6.4.1和Mule Runtime 3.9进行了测试。我喜欢Marco的答案,它非常适合我的用例
只需在流变量中创建一个数组,并在ForEach作用域中对该数组使用add()方法即可
OP的后续问题很好。这促使我使用建议的方法进行替代测试。在此处查看我的两个流程:
<flow name="sampleAggregatorFlow" doc:description="this is a simple demo that shows how to aggregate results into an accumulator array">
<http:listener config-ref="manage-s3-api-httpListenerConfig" path="/aggregate" allowedMethods="GET" doc:name="HTTP"/>
<set-payload value="#[['red','blue','gold']]" doc:name="Set Payload"/>
<set-variable variableName="accumulator" value="#[[]]" doc:name="accumulator"/>
<foreach doc:name="For Each">
<expression-transformer expression="#[flowVars.accumulator.add(payload)]" doc:name="addEm"/>
</foreach>
<set-payload value="#[flowVars.accumulator]" doc:name="Set Payload"/>
<json:object-to-json-transformer doc:name="Object to JSON"/>
</flow>
<flow name="Copy_of_sampleAggregatorFlow" doc:description="this is a simple demo that shows how to aggregate results into an accumulator array">
<http:listener config-ref="manage-s3-api-httpListenerConfig" path="/aggregate2" allowedMethods="GET" doc:name="Copy_of_HTTP"/>
<set-payload value="#[['red','blue','gold']]" doc:name="Copy_of_Set Payload"/>
<set-variable variableName="accumulator" value="#[new java.util.ArrayList()]" doc:name="Copy_of_accumulator"/>
<foreach doc:name="Copy_of_For Each">
<expression-transformer expression="#[flowVars.accumulator.add(payload)]" doc:name="Copy_of_addEm"/>
</foreach>
<set-payload value="#[flowVars.accumulator]" doc:name="Copy_of_Set Payload"/>
<json:object-to-json-transformer doc:name="Copy_of_Object to JSON"/>
</flow>
2017年12月26日,使用Anypoint Studio 6.4.1和Mule Runtime 3.9进行了测试。我喜欢Marco的答案,它非常适合我的用例
只需在流变量中创建一个数组,并在ForEach作用域中对该数组使用add()方法即可
OP的后续问题很好。这促使我使用建议的方法进行替代测试。在此处查看我的两个流程:
<flow name="sampleAggregatorFlow" doc:description="this is a simple demo that shows how to aggregate results into an accumulator array">
<http:listener config-ref="manage-s3-api-httpListenerConfig" path="/aggregate" allowedMethods="GET" doc:name="HTTP"/>
<set-payload value="#[['red','blue','gold']]" doc:name="Set Payload"/>
<set-variable variableName="accumulator" value="#[[]]" doc:name="accumulator"/>
<foreach doc:name="For Each">
<expression-transformer expression="#[flowVars.accumulator.add(payload)]" doc:name="addEm"/>
</foreach>
<set-payload value="#[flowVars.accumulator]" doc:name="Set Payload"/>
<json:object-to-json-transformer doc:name="Object to JSON"/>
</flow>
<flow name="Copy_of_sampleAggregatorFlow" doc:description="this is a simple demo that shows how to aggregate results into an accumulator array">
<http:listener config-ref="manage-s3-api-httpListenerConfig" path="/aggregate2" allowedMethods="GET" doc:name="Copy_of_HTTP"/>
<set-payload value="#[['red','blue','gold']]" doc:name="Copy_of_Set Payload"/>
<set-variable variableName="accumulator" value="#[new java.util.ArrayList()]" doc:name="Copy_of_accumulator"/>
<foreach doc:name="Copy_of_For Each">
<expression-transformer expression="#[flowVars.accumulator.add(payload)]" doc:name="Copy_of_addEm"/>
</foreach>
<set-payload value="#[flowVars.accumulator]" doc:name="Copy_of_Set Payload"/>
<json:object-to-json-transformer doc:name="Copy_of_Object to JSON"/>
</flow>
2017年12月26日,使用Anypoint Studio 6.4.1和Mule Runtime 3.9进行了测试。我喜欢Marco的答案,它非常适合我的用例
只需在流变量中创建一个数组,并在ForEach作用域中对该数组使用add()方法即可
OP的后续问题很好。这促使我使用建议的方法进行替代测试。在此处查看我的两个流程:
<flow name="sampleAggregatorFlow" doc:description="this is a simple demo that shows how to aggregate results into an accumulator array">
<http:listener config-ref="manage-s3-api-httpListenerConfig" path="/aggregate" allowedMethods="GET" doc:name="HTTP"/>
<set-payload value="#[['red','blue','gold']]" doc:name="Set Payload"/>
<set-variable variableName="accumulator" value="#[[]]" doc:name="accumulator"/>
<foreach doc:name="For Each">
<expression-transformer expression="#[flowVars.accumulator.add(payload)]" doc:name="addEm"/>
</foreach>
<set-payload value="#[flowVars.accumulator]" doc:name="Set Payload"/>
<json:object-to-json-transformer doc:name="Object to JSON"/>
</flow>
<flow name="Copy_of_sampleAggregatorFlow" doc:description="this is a simple demo that shows how to aggregate results into an accumulator array">
<http:listener config-ref="manage-s3-api-httpListenerConfig" path="/aggregate2" allowedMethods="GET" doc:name="Copy_of_HTTP"/>
<set-payload value="#[['red','blue','gold']]" doc:name="Copy_of_Set Payload"/>
<set-variable variableName="accumulator" value="#[new java.util.ArrayList()]" doc:name="Copy_of_accumulator"/>
<foreach doc:name="Copy_of_For Each">
<expression-transformer expression="#[flowVars.accumulator.add(payload)]" doc:name="Copy_of_addEm"/>
</foreach>
<set-payload value="#[flowVars.accumulator]" doc:name="Copy_of_Set Payload"/>
<json:object-to-json-transformer doc:name="Copy_of_Object to JSON"/>
</flow>
2017年12月26日使用Anypoint Studio 6.4.1和Mule Runtime 3.9进行的测试请整理格式。把你的问题说清楚,这是最帮不上忙的。显示您的流程。请整理格式。把你的问题说清楚,这是最帮不上忙的。显示您的流程。请整理格式。把你的问题说清楚,这是最帮不上忙的。显示您的流程。请整理格式。把你的问题说清楚,这是最帮不上忙的。显示您的流。我是否可以将变量值设置为value=“#[new java.util.ArrayList()”,而不是将其设置为#[[])