【问题标题】:How can Hazelcast client be notified of an another added or removed clientHazelcast 客户端如何被通知另一个添加或删除的客户端
【发布时间】:2017-06-02 20:27:24
【问题描述】:

有一个应用程序堆栈包含

  • 2 个嵌入式 hazelcast 应用程序; (应用 A)
  • 2 个使用 hazelcast 客户端的应用程序。 (应用 B)

App B需要在节点之间协调任务执行,所以只有一个节点执行特定任务。

使用app A,通过将网守创建为库来实现相当容易,需要查询任务执行许可。网守将跟踪集群中的 hazelcast 成员,并仅将许可分配给单个节点。它将注册一个MembershipListener 以跟踪集群中的变化。

但是,app B,作为 Hazelcast 客户端,不能使用这样的看门人,因为客户端无法访问ClientService(通过 hazelcastInstance.getClientService()),因此无法注册一个ClientListener(类似于 MembershipListener,但用于客户端节点),以便在添加或删除客户端时收到通知。

如何为以HazelcastClients 身份加入集群的应用程序实施这种协调网守?

【问题讨论】:

    标签: hazelcast


    【解决方案1】:

    您可能必须在成员上使用侦听器(获取集群中最旧的成员并在“主”更改时更新侦听器)并使用 ITopic 通知其他客户端。

    暂时想不出别的办法。

    【讨论】:

    • 所以成员(即非客户端)将实施看门人并跟踪客户端,并通过ITopic 更新各个客户端节点有关更改的信息?可能只是工作,但这会在我的情况下引入竞争条件,因为(面向客户端的)网守的许可分配方法将在本地缓存。现在客户端需要在收到通知后刷新缓存,因此可以决定(或也通过 ITopic 告知)新的 master 并将其存储在 IMap 中。顺便说一句,“获取集群中最老的成员”到底是什么意思?
    • 集群中最老的成员比其他成员有点“平等”;)最老的成员是HazelcastInstance::getCluster::getMembers,并取返回集合中的第一个元素。这始终是具有特殊“master alike”特权的成员,如 javadoc 中所述:docs.hazelcast.org/docs/3.8.2/javadoc/com/hazelcast/core/…
    猜你喜欢
    • 2019-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-08
    • 1970-01-01
    • 2015-08-28
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多