Apache camel 如何在Camel中将列表拆分为较小的列表?

Apache camel 如何在Camel中将列表拆分为较小的列表?,apache-camel,Apache Camel,我有一个流程,从文件中读取,转换为CSV,然后将每一行转换为对象。最后我列出了一个清单。现在我想把它分成更小的列表,并并行处理每个列表。我可以使用split()获取单个条目,但我所有使用聚合的尝试都没有得到一个列表,只有单个条目 from("file://") .unmarshal(csvDataFormat) .to("bean:personReader") .split(body()) .aggregate( ??? ) .to("bean:send") 您是否在谈论组

我有一个流程,从文件中读取,转换为CSV,然后将每一行转换为对象。最后我列出了一个清单。现在我想把它分成更小的列表,并并行处理每个列表。我可以使用split()获取单个条目,但我所有使用聚合的尝试都没有得到一个列表,只有单个条目

from("file://")
  .unmarshal(csvDataFormat)
  .to("bean:personReader")
  .split(body())
  .aggregate( ??? )
  .to("bean:send")

您是否在谈论组合消息处理器eip模式:您可以在其中执行fork/join处理


如果是这样,请查看上面的链接,并查看仅使用splitter的示例,因为Camel中的splitter eip已内置聚合,因此您可以将所有拆分的消息再次连接到单个消息。

我最终使用了自定义聚合策略,因为AbstractListAggregationStrategy也不太适合:

class ListAggregationStrategy implements AggregationStrategy {
    @Override
    public Exchange aggregate(final Exchange oldExchange, final Exchange newExchange) {
        final Object value = newExchange.getIn().getBody();
        if (oldExchange == null) {
            newExchange.getIn().setBody(Lists.newArrayList(value));
            return newExchange;
        } else {
            oldExchange.getIn().getBody(List.class).add(value);
            return oldExchange;
        }
    }
}
然后: 来源(“直接:来源”) .aggregate() .常数(真) .completionSize(1000) .aggregationStrategy(新列表aggregationStrategy()) 。致(“直接:目标公司”)