Hazelcast客户端如何监听集群中Map的更新通知?
实现Hazelcast服务端-客户端架构及Map更新通知
一、从嵌入式部署迁移到服务端-客户端架构
- 拆分原WAR包中的嵌入式Hazelcast节点,单独部署为独立Hazelcast服务端集群:
- 移除WAR内的Hazelcast节点启动配置,将服务端集群配置单独部署,确保节点正常组成集群。
- 原WAR应用改为客户端模式,引入
hazelcast-client依赖,通过客户端配置连接到服务端集群。
二、实现Map更新全局通知
要让所有客户端接收READ_ONLY_MAP的更新通知,需为客户端注册EntryListener:
1. 自定义EntryListener实现
public class MapUpdateListener implements EntryAddedListener<String, Object>, EntryUpdatedListener<String, Object>, EntryRemovedListener<String, Object> { @Override public void entryAdded(EntryEvent<String, Object> event) { processUpdate(event); } @Override public void entryUpdated(EntryEvent<String, Object> event) { processUpdate(event); } @Override public void entryRemoved(EntryEvent<String, Object> event) { processUpdate(event); } private void processUpdate(EntryEvent<String, Object> event) { System.out.println("收到Map更新 - 键: " + event.getKey() + ", 旧值: " + event.getOldValue() + ", 新值: " + event.getValue()); // 此处添加业务处理逻辑 } }
2. 客户端注册监听器
在客户端初始化时绑定监听器:
// 初始化Hazelcast客户端,连接服务端集群 HazelcastInstance client = HazelcastClient.newHazelcastClient( new ClientConfig() .setClusterName("your-cluster-name") .addAddress("hazelcast-server-ip:5701") ); IMap<String, Object> readOnlyMap = client.getMap("READ_ONLY_MAP"); // 注册监听器,true表示携带值信息触发通知 readOnlyMap.addEntryListener(new MapUpdateListener(), true);
3. 关键注意点
- 服务端集群与客户端需使用相同集群名称,且网络互通(开放Hazelcast默认端口5701)。
- 所有注册了该监听器的客户端,无论哪个客户端触发
READ_ONLY_MAP的增、删、改操作,都会收到通知。
内容的提问来源于stack exchange,提问作者Pranjal
相关产品推荐
相关产品推荐

