1
有含有如何Hazelcast客户端被通知另一添加或删除客户端的
的应用栈- 2嵌入hazelcast应用; (应用程序A)
- 2个使用hazelcast客户端的应用程序。 (应用程序B)
应用B需要协调节点之间的任务的执行,因此,只有一个节点执行特定的任务。
随着应用程序A它是相当容易实现创建一个守门人作为一个库,它需要查询任务执行许可证。网守会跟踪群集中的hazelcast成员,并将许可仅分配给单个节点。它将注册一个MembershipListener
以跟踪群集中的更改。
然而,应用乙,作为一个Hazelcast客户端,不能使用这样的网闸的,因为客户端不能访问ClientService
(经由hazelcastInstance.getClientService()),因此这是无法注册一个ClientListener
(类似于到MembershipListener,但是对于客户端节点)将被通知添加或删除的客户端。
这样的协调关守怎么可以为加入群集的应用程序实现为HazelcastClient
?
因此,成员(即非客户端)将实施守门人并跟踪客户端,并通过“ITopic”更新单个客户端节点关于更改的内容? 可能只是工作,但这会引入竞争条件在我的情况下,因为面向客户端的网守的许可分配方法将在本地缓存。 现在客户端需要刷新缓存一旦通知,所以新的主人可以决定(或通过ITopic告知)并存储在IMap中。 顺便说一句,“采取集群中最老的成员”是什么意思? – laur
集群中最旧的成员比其他成员稍微“平等”;)最老的成员是'HazelcastInstance :: getCluster :: getMembers'并采用返回集合中的第一个元素。正如javadoc中所述,这总是具有特殊“大师级”特权的成员:http://docs.hazelcast.org/docs/3.8.2/javadoc/com/hazelcast/core/Cluster.html#getMembers-- – noctarius