2017-06-02 77 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