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

时间:2013-12-02 11:04:02

标签: apache-camel

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

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

2 个答案:

答案 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())       。要( “直接:目标”);