首页 > 解决方案 > 骆驼聚合器 forceCompletionOnStop VS completeAllOnStop

问题描述

forceCompletionOnStop 和 completeAllOnStop 有什么区别?是否可以或建议同时使用两者?

从文档中:

forceCompletionOnStop指示在上下文停止时完成所有当前聚合交换

completeAllOnStop指示在上下文停止时等待完成所有当前和部分(未决)聚合交换。这也意味着我们将等待存储在聚合存储库中的所有未决交换完成,以便在我们停止之前存储库为空。您可能希望在使用仅基于内存的基于内存的聚合存储库时启用此功能,并且不要将数据存储在磁盘上。启用此选项后,聚合器在停止 CamelContext 或使用它的路由时等待完成所有这些交换。

它对我来说有点混乱,它似乎是一样的

标签: apache-camelaggregator

解决方案


completeAllOnStop是一个“正常”的完成标准。Camel 聚合器实现该ShutdownAware接口,并且completeAllOnStop标准向 Camel 上下文指示聚合器在关闭之前需要一些额外的时间来完成其聚合。

forceCompletionOnStop另一方面,尝试在关闭过程中完成所有聚合( prepareShutdown)。

所以对我来说,它们似乎也非常相似,两者都试图在关闭 Camel 上下文之前完成所有聚合。我建议使用completeAllOnStop,因为这似乎是更主动的方式。有关关闭策略的更多信息,另请参阅Camel Docs 。

如果你同时配置它们,我不知道你是否得到“双重检查”:-)

请注意,即使forceCompletionOnStop关机是强制关机,也会跳过!在这种情况下,Camel 会尝试尽快关闭。据我所知,当正常关机在超时内不成功时,Camel 会强制关机。


推荐阅读