384.5. zookeeper 启用 Route 策略
zookeeper 实现了非常简单、有效的领导选举。此组件利用 RoutePolicy
中的这种选择功能来控制如何启用路由。此策略通常用于故障转移情况,以控制基于 Camel 的服务器的群集中路由的相同实例。一个非常常见的场景是一个简单的 'Master-Slave' 设置,其中多个路由实例分布在一个集群中,但只有一个(主设备)应一次运行。如果主设备出现故障,应从可用的从接口中选择新的主设备,并且此新主服务器中的路由应启动。
该策略在所有将涉及选举的 RoutePolicy
实例间使用通用 znode 路径。每条策略都会将其 ID 写入此节点,而 Zookeeper 将根据收到的顺序对写入进行排序。然后,策略读取节点列表以查看其 ID 的位置;此位置用于确定路由是否应启动。该策略在启动时使用应在集群中启动的路由实例数量进行配置,如果列表中的位置小于这个值,则其路由将启动。对于 Master-slave 情景,路由配置有 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");
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
相同的生命周期方法;这个策略在启动路由或消费者之前启动,因此可以保证在策略启动前没有处理。