【Hazelcast系列十一】分布式事件

2022-04-18 00:00:00 配置 事件 监听 注册 监听器

分布式事件

如果想感知某些事件,可以向Hazelcast实例注册监听器。监听器在集群范围内有效,向集群内的一个成员注册监听器,实际上是向集群内所有的成员注册了监听器。新加入成员产生的事件也会被发送给监听器。Hazelcast只生成注册了监听器的事件。如果没有监听器,也就不会有事件产生,为什么要去做没人关心的事情呢?如果在注册监听器时提供了谓词,事件在发送给监听器时首先要通过谓词,只有通过谓词的事件才能终发送给监听器。

根据经验,不宜在监听器内实现过重的处理逻辑(会阻塞线程影响事件的处理)。如若真的需要复杂的处理逻辑,可以使用ExecutorService 异步执行。

注意: 事件并不是高可用的,在故障场景有丢失的风险。但是有一些变通的手段,比如配置容量等可以用来降低事件丢失的可能性。

Hazelcast 提供以下事件监听器。

集群事件:

  • Membership Listener
  • Distributed Object Listener
  • Migration Listener
  • Partition Lost Listener
  • Lifecycle Listener
  • Client Listener

分布式对象事件:

  • Entry Listener
  • Item Listener
  • Message Listener

JCache :

  • Cache Entry Listener
  • ICache Partition Lost Listener

Hazelcast 客户端:

  • Lifecycle Listener
  • Membership Listener
  • Distributed Object Listener

8.1. 集群事件

8.1.1. 监听成员事件

下面的事件会触发成员关系监听器的接口方法被调用:

  • memberAdded
  • memberRemoved
  • memberAttributeChanged

实现一个成员关系监听器需要实现 MembershipListener 接口。

class ClusterMembershipListener : MembershipListener {
    override fun memberRemoved(event: MembershipEvent?) {
        println(event?.member.toString())
    }

    override fun memberAdded(event: MembershipEvent?) {
        println(event?.member.toString())
    }

    override fun memberAttributeChanged(event: MemberAttributeEvent?) {
        println(event?.member.toString())
    }

}

相关文章