我从文件中读取数据,转换为CSV,然后将每行转换为对象。所以我最终得到了一个List。现在我想把它拆分成更小的列表,并且并行处理每个列表。我可以使用split()来获取单个条目,但是我使用聚合的所有尝试都没有产生列表,只有单个项目。
from("file://")
.unmarshal(csvDataFormat)
.to("bean:personReader")
.split(body())
.aggregate( ??? )
.to("bean:send")
答案 0 :(得分:1)
您是在谈论组合的消息处理器eip模式:http://camel.apache.org/composed-message-processor.html您可以在哪里进行fork / join处理?
如果是这样,请查看上面的链接,并查看仅使用拆分器的示例,因为Camel中的拆分器eip已内置聚合,因此您可以将所有拆分的消息一起加入到单个再次留言。
答案 1 :(得分:0)
我最终使用自定义聚合策略,因为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;
}
}
}
然后: 从(“直接:源”) 。骨料() .constant(真) .completionSize(1000) .aggregationStrategy(new ListAggregationStrategy()) 。要( “直接:目标”);