385.5. zookeeper 启用的路由策略


ZooKeeper 支持开箱即用非常简单且有效的领导选举机制。此组件在 RoutePolicy 中利用此选择功能来控制是否启用了路由。此策略通常在故障切换场景中使用,以控制基于 Camel 服务器集群的相同路由实例。一个非常常见的场景是一个简单的"Master-Slave"设置,其中集群中分布了多个路由实例,但一次只能运行其中一个路由。如果 master 失败,应该从可用的从服务器中选择一个新的 master,并且应该启动这个新 master 中的路由。

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

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

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

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

  • ZooKeeperRoutePolicy
  • CuratorLeaderRoutePolicy (since 2.19)
  • MultiMasterCuratorLeaderRoutePolicy (since 2.19)

ZooKeeperRoutePolicy 支持多个活跃节点,但它只有在 Camel 组件及其相应的 Consumer 启动后才会激活,这会根据路由定义所引入的风险,您的组件可能已经开始使用事件并生成 'Exchange's,在策略可能认为节点不应该被激活前。

CuratorLeaderRoutePolicy 只支持单个活跃节点,但它绑定到不同的 CamelContext 生命周期方法;此策略在启动任何路由或消费者之前启动。因此,您可以确保在策略采用其决策前不要处理任何活动节点。

MultiMasterCuratorLeaderRoutePolicy 支持多个活跃节点,它绑定到与 CuratorLeaderRoutePolicy 相同的生命周期方法;此策略在启动任何路由或消费者之前启动。因此,在策略决定之前,您也无法处理。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat