我正在尝试在我的路线上运行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
答案 0 :(得分:1)
onCompletion()
。使用聚合器时,所有未完成聚合的交换都会在聚合器处完成路由,因此会为每个正在聚合的文件调用externalLogger
。
如果您希望在汇总后进行记录,则可以在aggregate()
之后调用记录器。
如果您需要区分聚合的超时和完成,那么提供自定义AggregationStrategy
并实现接口CompletionAwareAggregationStrategy
和TimeoutAwareAggregationStrategy
可能会有所帮助。