You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在JBoss Fuse 6.3与Apache Camel 2.17中拆分JSON数组并分组

在JBoss Fuse 6.3(Apache Camel 2.17)的Spring DSL中拆分JSON数组为固定大小分组

你要实现的需求很清晰:把包含9个国家对象的JSON数组拆成每2个一组(最后一组1个),且消息顺序无关。你的split+aggregate思路完全正确,只是需要把聚合策略配置到位,我来给你补全正确的Spring DSL代码:

首先,先定义GroupedExchangeAggregationStrategy的Bean,这个策略会把聚合的消息体收集成列表,正好匹配你需要的数组格式:

<bean id="groupedExchangeStrategy" class="org.apache.camel.processor.aggregate.GroupedExchangeAggregationStrategy"/>

然后是完整的路由配置:

<route id="split-and-aggregate-countries">
    <from uri="direct:processCountries"/>
    <!-- 拆分JSON数组的每个元素,流式处理适合大数据量场景 -->
    <split streaming="true">
        <!-- JsonPath表达式遍历数组的每一项,拆分出单个国家对象 -->
        <jsonpath>$[*]</jsonpath>
        <!-- 聚合拆分后的消息:每2条聚合一次,超时1秒确保最后一组能触发 -->
        <aggregate completionSize="2" completionTimeout="1000" strategyRef="groupedExchangeStrategy">
            <!-- 聚合完成后处理消息,这里用log输出示例,可替换为下游端点 -->
            <log message="聚合后的分组消息: ${body}"/>
            <!-- <to uri="your-downstream-endpoint"/> -->
        </aggregate>
    </split>
</route>

关键配置说明:

  • <jsonpath>$[*]</jsonpath>:这是你原来配置的小疏漏,这个表达式会遍历输入的JSON数组,把每个国家对象拆成单独消息;如果用$会把整个数组作为一个拆分项,达不到拆分单个元素的效果
  • completionSize="2":指定每收集2条消息就完成一次聚合,生成包含2个国家对象的数组
  • completionTimeout="1000":设置1秒超时,确保最后剩下的1条消息不会一直等待,超时后自动完成聚合
  • strategyRef="groupedExchangeStrategy":引用我们定义的聚合策略,它会把聚合的消息体合并成列表,正好对应你要的JSON数组格式

效果验证:

输入你提供的9个国家的JSON数组后,这个路由会生成5条输出消息:

  • 前4条消息各包含2个国家对象
  • 第5条消息包含最后1个国家对象
    完全符合你的预期输出格式。

小提示:如果你的JSON数组数据量不大,可以去掉streaming="true",非流式处理在小数据量下更高效;如果数据量很大,流式处理能避免内存溢出问题。

内容的提问来源于stack exchange,提问作者Ravi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:51:55