【Hazelcast系列十一】分布式事件
分布式事件
如果想感知某些事件,可以向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())
}
}
相关文章