2014-01-29 63 views
2

我想知道什么是远程控制路由的最佳方法。我已经看到了Apache Zookeeper及其与骆驼的整合,但我不知道我是否可以用它来完成。使用复制启动/停止Apache Camel远程路由

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

谢谢!

+0

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

回答

1

假设任何一个应用程序都可以使用。然后这些应用程序将尝试创建一个短暂的znode,例如“/ consumerstarted”,并在创建成功时开始使用。无论哪个应用程序首先创建临时节点,那将是消费者。另一个应用程序会得到“Zookeeper节点已经存在”的异常类型,并决定不使用。 现在,从这两个应用程序中,您应该在Znode上设置一个监视,并且节点被删除时监视器监听器将被触发(可能是因为所有者应用程序显式删除短暂节点或所有者应用程序关闭或所有者应用程序丢失连接到Zookeeper)。然后,应用程序应该再次尝试通过创建短暂的“/ consumertarted”Znode来成为消费者。

另一种方法可能是: 所有应用程序都在某个“文件夹”下面声明自己的临时Znodes,如“/ allapps”。 Znodes的名称可能是一些独特的ID。例如,/ allapps/uuid1,/ allapps/uuid2等。 所有的应用程序都应该将手表放在相应的Znode上以进行数据更改。每当数据设置为“开始消费”时,相应的应用程序就应该开始消费。您可以设置来自其他程序或Zookeeper CLI的数据。

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

+0

第二种方法是我正在寻找的。我会看看你建议的客户。谢谢! – hveiga