384.5. zookeeper 启用 Route 策略


zookeeper 实现了非常简单、有效的领导选举。此组件利用 RoutePolicy 中的这种选择功能来控制如何启用路由。此策略通常用于故障转移情况,以控制基于 Camel 的服务器的群集中路由的相同实例。一个非常常见的场景是一个简单的 'Master-Slave' 设置,其中多个路由实例分布在一个集群中,但只有一个(主设备)应一次运行。如果主设备出现故障,应从可用的从接口中选择新的主设备,并且此新主服务器中的路由应启动。

该策略在所有将涉及选举的 RoutePolicy 实例间使用通用 znode 路径。每条策略都会将其 ID 写入此节点,而 Zookeeper 将根据收到的顺序对写入进行排序。然后,策略读取节点列表以查看其 ID 的位置;此位置用于确定路由是否应启动。该策略在启动时使用应在集群中启动的路由实例数量进行配置,如果列表中的位置小于这个值,则其路由将启动。对于 Master-slave 情景,路由配置有 1 路由实例,并且只有列表中的第一个条目将启动其路由。所有策略都会监视对列表的更新,以及列表在应启动路由时重新计算它们。有关 Zookeeper 的领导选举功能的更多信息,请参阅 此页面

以下示例将节点 /someapplication/somepolicy 用于选举,并被设置为仅启动节点列表中的顶级 '1' 条目,例如选择 master:

Copy to Clipboard Toggle word wrap
ZooKeeperRoutePolicy policy = new ZooKeeperRoutePolicy("zookeeper:localhost:39913/someapp/somepolicy", 1);
from("direct:policy-controlled")
    .routePolicy(policy)
    .to("mock:controlled");

组件中目前定义了 3 个策略,具有不同的 SLA:

  • ZooKeeperRoutePolicy
  • CuratorLeaderRoutePolicy (自 2.19开始)
  • MultiMasterCuratorLeaderRoutePolicy (自 2.19开始)

ZooKeeperRoutePolicy 支持多个活跃节点,但仅在 Camel 组件及其对应消费者启动后启动激活,这将会基于您的路由定义,您组件可以启动消耗事件的风险,并生成 'Exchange's,然后策略无法激活。

CuratorLeaderRoutePolicy 只支持一个活跃的节点,但它与不同的 CamelContext 生命周期方法绑定 ; 此策略在启动任何路由或消费者之前启动,因此可以在策略决定前没有处理。

MultiMasterCuratorLeaderRoutePolicy 支持多个活跃节点,并绑定到与 CuratorLeaderRoutePolicy 相同的生命周期方法;这个策略在启动路由或消费者之前启动,因此可以保证在策略启动前没有处理。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat, Inc.