2014-01-29 68 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