【问题标题】:Camel Aggregator forceCompletionOnStop VS completeAllOnStop骆驼聚合器 forceCompletionOnStop VS completeAllOnStop
【发布时间】:2018-10-25 20:44:26
【问题描述】:
forceCompletionOnStop 和 completeAllOnStop 有什么区别?是否可以或建议同时使用两者?
来自文档:
forceCompletionOnStop 指示在上下文停止时完成所有当前聚合交换
completeAllOnStop 表示在上下文停止时等待完成所有当前和部分(待定)聚合交换。这也意味着我们将等待存储在聚合存储库中的所有待处理交换完成,以便在我们停止之前存储库是空的。您可能希望在使用仅基于内存的基于内存的聚合存储库时启用此功能,并且不要将数据存储在磁盘上。启用此选项后,当停止 CamelContext 或使用它的路由时,聚合器将等待在其停止之前完成所有这些交换。
对我来说有点困惑,它似乎是一样的
【问题讨论】:
标签:
apache-camel
aggregator
【解决方案1】:
completeAllOnStop 是“正常”完成标准。 Camel 聚合器实现了ShutdownAware 接口,completeAllOnStop 标准向 Camel 上下文指示聚合器需要在关闭之前有一些额外时间才能完成其聚合。
另一方面,
forceCompletionOnStop 尝试完成所有聚合在关闭过程中 (prepareShutdown)。
所以对我来说,它们似乎也非常相似,两者都试图在关闭 Camel 上下文之前完成所有聚合。我建议使用 completeAllOnStop 因为这似乎是更主动的方式。另请参阅Camel Docs for more info about the shutdown strategy。
如果你同时配置它们,我不知道你是否会得到“双重检查”:-)
请注意,如果关闭是强制关闭,甚至会跳过forceCompletionOnStop!在这种情况下,Camel 会尝试尽快关闭。
据我所知,当正常关机在超时内不成功时,Camel 会强制关机。