onComplete并使用completionTimeout进行聚合

时间:2013-07-03 12:24:41

标签: apache-camel

我正在尝试在我的路线上运行onCompletion()块,其中包含completionTimeout的聚合定义。在路由实际完成之前似乎调用了onCompletion,因为我在OnCompletion日志条目之前从AggregateTimeoutChecker获取了日志条目。

如何让onComplete等待聚合超时?

当然我可以在onCompletion上添加一个大于completionTimeout的延迟,但这会大大减慢我的测试速度。

我的路线如下:

from(fileEndpoint)
    .bean(externalLogger, "start")
    .onCompletion()
         .bean(externalLogger, "end") // <-- Gets called too early
    .end()
    .split().tokenize("\n")
    .bean(MyBean.class)
    .aggregate(header("CamelFileName"), ...)
         .completionSize(size)
         .completionTimeout(500)
    .bean(AggregatesProcessor.class); // <-- some changes here don't arrive
                                      //     at onCompletion

1 个答案:

答案 0 :(得分:1)

完成路由后,每个传入交换机都会触发

onCompletion()。使用聚合器时,所有未完成聚合的交换都会在聚合器处完成路由,因此会为每个正在聚合的文件调用externalLogger

如果您希望在汇总后进行记录,则可以在aggregate()之后调用记录器。

如果您需要区分聚合的超时和完成,那么提供自定义AggregationStrategy并实现接口CompletionAwareAggregationStrategyTimeoutAwareAggregationStrategy可能会有所帮助。