2017-06-02 89 views
1

有含有如何Hazelcast客戶端被通知另一添加或刪除客戶端的

的應用棧
  • 2嵌入hazelcast應用; (應用程序A)
  • 2個使用hazelcast客戶端的應用程序。 (應用程序B)

應用B需要協調節點之間的任務的執行,因此,只有一個節點執行特定的任務。

隨着應用程序A它是相當容易實現創建一個守門人作爲一個庫,它需要查詢任務執行許可證。網守會跟蹤羣集中的hazelcast成員,並將許可僅分配給單個節點。它將註冊一個MembershipListener以跟蹤羣集中的更改。

然而,應用乙,作爲一個Hazelcast客戶端,不能使用這樣的網閘的,因爲客戶端不能訪問ClientService(經由hazelcastInstance.getClientService()),因此這是無法註冊一個ClientListener(類似於到MembershipListener,但是對於客戶端節點)將被通知添加或刪除的客戶端。

這樣的協調關守怎麼可以爲加入羣集的應用程序實現爲HazelcastClient

回答

1

您可能必須在成員上使用偵聽器(在集羣中取最舊的成員,並在「主」更改時更新偵聽器)並使用ITopic通知其他客戶端。

現在想不到另一種方式。

+0

因此,成員(即非客戶端)將實施守門人並跟蹤客戶端,並通過「ITopic」更新單個客戶端節點關於更改的內容? 可能只是工作,但這會引入競爭條件在我的情況下,因爲面向客戶端的網守的許可分配方法將在本地緩存。 現在客戶端需要刷新緩存一旦通知,所以新的主人可以決定(或通過ITopic告知)並存儲在IMap中。 順便說一句,「採取集羣中最老的成員」是什麼意思? – laur

+0

集羣中最舊的成員比其他成員稍微「平等」;)最老的成員是'HazelcastInstance :: getCluster :: getMembers'並採用返回集合中的第一個元素。正如javadoc中所述,這總是具有特殊「大師級」特權的成員:http://docs.hazelcast.org/docs/3.8.2/javadoc/com/hazelcast/core/Cluster.html#getMembers-- – noctarius