我正在尝试执行文件导入过程,其中在给定文件夹的子目录中拾取文件,该子目录标识文件所针对的客户端,然后解析,拆分和发送记录Hazelcast SEDA排队。我想处理每个记录作为Hazelcast SEDA队列的读取,然后它返回一个可以聚合的状态代码(创建,更新或错误)。
我还会在首次选择文件时创建一份工作记录,并且我想用最终的创建,更新和错误计数来更新作业记录。
下面的JobProcessor创建此记录,并在邮件的标题中设置客户端组织和作业对象。 CensusExcelDataFormat读取Excel文件并为每一行创建一个Employee对象,然后返回一个Collection。
MobiResourceManager.xcodeproj
我遇到的问题是列表聚合立即发生,而不是获取状态列表,而是获得相同的Employee对象列表。我希望在SEDA队列上发送Employee对象,并且要聚合的队列上的处理返回值然后通过JobCompletionProcessor运行以更新作业记录。
答案 0 :(得分:0)
您看到的行为是默认行为。 apache camel splitter documentation在splitter返回部分中清楚地说明了这一点。
因此,您可以看到您需要实施自己的拆分器聚合策略。为此,创建一个实现AggrgationStrategy的新类,如下面的代码:
public class MyAggregationStrategy implements AggregationStrategy
{
public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
if (oldExchange == null) //this would be null on the first exchange.
{
//do some work on the first time if needed
}
/*
Here you put your code to calculate failed, updated, created.
*/
}
}
然后,您可以像下面的示例一样指定自定义聚合策略:
.split(body(), new MyAggregationStrategy()) //Java DSL
<split strategyRef="myAggregationStrategy"/> //XML Blueprint