1

我有一个包含大约 200 个对象的 json 对象列表。我想将该列表拆分为较小的列表,其中每个列表最多包含 20 个对象。我想将每个子列表发布到基于 HTTP 的端点。

<flow name="send-to-next-step" doc:name="send-to-vm-flow">
    <vm:inbound-endpoint exchange-pattern="one-way"
        path="send-to-next-step-vm" doc:name="VM" />
    <!-- received the JSON List payload with 200 objects-->
    <!-- TODO do processing here to split the list into sub-lists and call sub-flow for each sub-list
    <flow-ref name="send-to-aggregator-sf" doc:name="Flow Reference" />
</flow>

一种可能的方法是我编写了一个 java 组件,它遍历列表并在遍历每 20 个对象后,调用 sub-flow。有没有更好的方法来实现这一点?

4

2 回答 2

6

如果您的有效负载是 Java 集合,则 Mule foreach范围内有批处理:http: //www.mulesoft.org/documentation/display/current/Foreach

例子:

<foreach batchSize="20">
   <json:object-to-json-transformer/>
   <http:outbound-endpoint ... />
</foreach>
于 2014-03-05T13:29:48.893 回答
3

您可以使用 Groovycollate方法进行批处理,然后根据您的需要使用foreachor :collection-splitter

<json:json-to-object-transformer returnClass="java.util.List"/>
<set-payload value="#[groovy:payload.collate(20)]"/>
<foreach>
   <json:object-to-json-transformer/>
   <http:outbound-endpoint exchange-pattern="request-response" host="0.0.0.0" port="8082" path="xx"/>
</foreach>
<set-payload value="#[groovy:payload.flatten()]"/>

这会将每批 20 个对象发送到 http 端点,然后展平回原始列表。

于 2014-03-05T06:45:41.937 回答