385.5. ZooKeeper 启用的路由策略


ZooKeeper 允许非常简单且有效的领导选举功能。此组件在 RoutePolicy 中利用这个选择功能来控制路由的时间和方式。此策略通常在故障切换场景中使用,以控制基于 Camel 的服务器集群中路由相同的实例。一个非常常见的场景是一个简单的"Master-Slave"设置,其中有多个路由在集群中分发,但只有一个实例(master)之一应该一次运行。如果主设备失败,则应从可用的 slaves 选择一个新的 master,并且应启动此新 master 中的路由。

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

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

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 (since 2.19)

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

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

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

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部