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