java - 通过复制远程启动/停止 Apache Camel 路由

标签 java apache-camel apache-zookeeper

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

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

谢谢!

最佳答案

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

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

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

关于java - 通过复制远程启动/停止 Apache Camel 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21443234/

相关文章:

java - Android 调用广播接收器无法正常工作? (棉花糖)

java - 如何使用 UiBinder 以声明方式设置 GWT Flextable 第一行(即标题)?

java - 如何在 java dom 解析器中格式化 xml?

apache-camel - 如何从 Camel FTP 路由交换中获取实际文件对象

java - 使用 apache Camel 下载邮件附件时出错

java - Java解释器浮点常量的默认数据类型

ssl - 如何验证java是否在相互身份验证场景中发送客户端证书

java - 在 geomesa accumulo 数据存储中获取动物园实例的异常

hadoop - hBase - 服务器有太多连接

java - 在Zookeeper中不使用cmd创建ZNode