You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

新手求助:如何在Python中监控Hazelcast事件及创建事件监听器

在Python中为Hazelcast添加事件监听器

当然可以在Python中监控Hazelcast的各类事件,针对你提供的Map操作代码,以下是具体的实现步骤和示例:

核心思路

Hazelcast Python客户端支持为Map、Queue等分布式数据结构注册事件监听器,最常用的是Map条目监听器,可以监听条目新增、更新、删除等操作。注册监听器时,你需要定义事件处理逻辑,再将其绑定到对应的Map实例上。

示例代码(函数式监听器)

先补全客户端初始化逻辑,再添加监听器:

import hazelcast
import time

# 定义事件处理函数
def on_entry_added(event):
    print(f"[新增事件] 键: {event.key}, 值: {event.value}")

def on_entry_updated(event):
    print(f"[更新事件] 键: {event.key}, 旧值: {event.old_value}, 新值: {event.value}")

def on_entry_removed(event):
    print(f"[删除事件] 键: {event.key}, 原 value: {event.old_value}")

# 初始化Hazelcast客户端(如果集群不在本地,需指定cluster_members参数)
client = hazelcast.HazelcastClient()

# 获取Map实例(非阻塞实例更适配异步事件模型)
hz_map = client.get_map("auth-map")

# 注册条目监听器,指定要监听的事件类型
listener_id = hz_map.add_entry_listener(
    added=on_entry_added,
    updated=on_entry_updated,
    removed=on_entry_removed,
    include_value=True  # 是否在事件中携带value,默认True
)

# 执行你原有的操作
hz_map.blocking().set("key", "value")
print("当前key的值:", hz_map.blocking().get("key"))

# 测试更新事件
hz_map.blocking().set("key", "new-value")
# 测试删除事件
hz_map.blocking().remove("key")

# 保持程序运行,否则执行完操作会直接退出,无法看到事件输出
time.sleep(5)

# 可选:移除监听器
# hz_map.remove_entry_listener(listener_id)

# 关闭客户端
client.shutdown()

示例代码(类式监听器)

如果需要更规整的代码结构,可以继承EntryListener类来实现监听器:

import hazelcast
import time
from hazelcast.listener import EntryListener

# 自定义监听器类
class AuthMapListener(EntryListener):
    def entry_added(self, event):
        print(f"[新增事件] 键: {event.key}, 值: {event.value}")
    
    def entry_updated(self, event):
        print(f"[更新事件] 键: {event.key}, 旧值: {event.old_value}, 新值: {event.value}")
    
    def entry_removed(self, event):
        print(f"[删除事件] 键: {event.key}, 原 value: {event.old_value}")

# 初始化客户端
client = hazelcast.HazelcastClient()

hz_map = client.get_map("auth-map")

# 注册自定义监听器
custom_listener = AuthMapListener()
listener_id = hz_map.add_entry_listener(custom_listener, include_value=True)

# 执行操作
hz_map.blocking().set("key", "value")
print("当前key的值:", hz_map.blocking().get("key"))

hz_map.blocking().set("key", "updated-value")
hz_map.blocking().remove("key")

time.sleep(5)

client.shutdown()

注意事项

  • 确保Hazelcast集群已启动,客户端能正常连接(默认连接本地127.0.0.1:5701,集群地址不同需在初始化客户端时指定cluster_members)
  • 监听器回调会在客户端的线程池中执行,避免在回调内执行长时间阻塞操作,防止影响事件处理效率
  • 除了Map条目事件,Hazelcast还支持集群成员变更、分布式对象创建/销毁等事件,可通过对应监听器接口注册

内容的提问来源于stack exchange,提问作者Bobson Churchill

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 11:06:46