【问题标题】:Start/Stop Apache Camel routes remotely with replication使用复制远程启动/停止 Apache Camel 路由
【发布时间】:2014-02-05 11:50:37
【问题描述】:

我想知道远程控制路线的最佳方法是什么。我已经查看了Apache Zookeeper 及其与 Camel 的集成,但我不确定是否可以用它来完成我想要的操作。

我的场景如下:我有两条完全相同的路由在两个不同的 Java 应用程序中运行。我希望两条路线都运行,但只有其中一条正在消耗。但是,我希望能够决定应该使用哪条路线。我不确定ZookeeperRoutePolicy 是否可行。如果是,我怎样才能做到这一点?如果没有,创建我自己的路由策略将是要走的路吗?

谢谢!

【问题讨论】:

  • 我不确定 ZookeeperRoutePolicy 是如何工作的,但您可以查看 master: 组件以获得一些想法。我认为它使用 zookeeper 以某种方式获得“锁定”。

标签: java apache-camel apache-zookeeper


【解决方案1】:

假设任何一个应用程序都可以使用。然后应用程序将尝试创建一个临时 znode,例如“/consumerstarted”,如果创建成功,将开始消费。无论哪个应用程序首先创建临时节点,这将是消费者。另一个应用程序将获得“Zookeeper 节点已存在”类型的异常并决定不使用。 现在从这两个应用程序中,您应该在 Znode 上设置一个监视,当节点被删除时,监视侦听器将被触发(可能是因为所有者应用程序显式删除了临时节点或所有者应用程序关闭,或者所有者应用程序失去了与动物园管理员)。然后应用应该再次尝试通过创建临时“/consumerstarted”Znode 来成为消费者。

另一种方法可能是: 所有应用程序都在某个“文件夹”下注册自己的临时 Znode,例如“/allapps”。 Znode 的名称可能是某个唯一的 Id。例如,/allapps/uuid1、/allapps/uuid2 等。 所有应用程序都应将手表放在其相应的 Znode 上以进行数据更改。每当数据设置为“开始消费”之类的东西时,相应的应用程序就应该开始消费。您可以从其他程序或 Zookeeper CLI 设置数据。

顺便说一句,https://github.com/sgroschupf/zkclient 是一个非常好的 Zookeeper 客户端库。

【讨论】:

  • 第二种方法是我一直在寻找的。我会看看你建议的客户。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-29
  • 1970-01-01
相关资源
最近更新 更多