我想知道远程控制路线的最佳方法是什么。我已经看过Apache Zookeeper
及其与Camel的集成,但我不确定我能用它做什么。
我的场景如下:我有两个完全相同的路由在两个不同的Java应用程序中运行。我希望两条路线都在运行,但只有其中一条消耗。但是,我希望能够决定应该使用哪条路线。我不确定ZookeeperRoutePolicy
是否可行。如果是,我怎么能实现这个目标?如果没有,创建我自己的路线政策将是要走的路?
谢谢!
答案 0 :(得分:1)
假设任何一个应用程序都可以使用。然后应用程序将尝试创建一个短暂的znode,比如说“/ consumerstarted”,如果创建成功,它将开始消费。无论哪个应用程序首先创建短暂节点,那将是消费者。另一个应用程序将获得“Zookeeper节点已经存在”的异常并将决定不消耗。 现在,从这两个应用程序中,您应该在Znode上设置监视,并且在节点被删除时将触发监视侦听器(可能是因为所有者应用程序明确删除了临时节点或所有者应用程序关闭,或者所有者应用程序失去连接到动物园管理员)。然后应用程序应该再次尝试通过创建短暂的“/ consumerstarted”Znode来成为消费者。
另一种方法可能是: 所有的应用程序都在一些“文件夹”中注明了自己的短暂的Znodes,并说“/ allapps”。 Znodes的名称可能是一些唯一的Id。例如,/ allapps / uuid1,/ allapps / uuid2等。 所有应用程序都应将手表放在相应的Znode上以进行数据更改。每当数据设置为“开始消费”时,相应的应用程序应该开始消费。您可以从其他程序或Zookeeper CLI设置数据。
BTW,https://github.com/sgroschupf/zkclient是一个非常好的Zookeeper客户端库。