1

我正在尝试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
4

1 回答 1

1

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

如果你想在聚合之后记录,你可以在aggregate().

如果您需要区分聚合的超时和完成,提供自定义AggregationStrategy并实现接口CompletionAwareAggregationStrategyTimeoutAwareAggregationStrategy.

于 2013-08-07T14:51:37.233 回答