虽然自己实现了客户端监听zk节点变化,今天发现有现成的工具,着实不赖,记录一下。呵呵!
如何使用Cruator监听zookeeper事件变化
package curator;
import org.apache.curator.RetryPolicy;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.framework.CuratorFrameworkFactory.Builder;
import org.apache.curator.framework.recipes.cache.PathChildrenCache;
import org.apache.curator.framework.recipes.cache.PathChildrenCacheEvent;
import org.apache.curator.framework.recipes.cache.PathChildrenCacheListener;
import org.apache.curator.retry.ExponentialBackoffRetry;
import org.apache.curator.utils.ZKPaths;
public class CuratorWatch {
static CuratorFramework zkclient = null;
static String nameSpace = "wasu";// 根节点
static {
String zkhost = "127.0.0.1:2181";// zk的host
RetryPolicy rp = new ExponentialBackoffRetry(1000, 3);// 重试机制
Builder builder = CuratorFrameworkFactory.builder().connectString(zkhost).connectionTimeoutMs(5000).sessionTimeoutMs(5000).retryPolicy(rp);
builder.namespace(nameSpace);
CuratorFramework zclient = builder.build();
zkclient = zclient;
zkclient.start();// 放在这前面执行
zkclient.newNamespaceAwareEnsurePath(nameSpace);
}
public static void main(String[] args) throws Exception {
watch();
Thread.sleep(Long.MAX_VALUE);
}
/**
*
* 监听节点变化
*
* */
public static void watch() throws Exception {
PathChildrenCache cache = new PathChildrenCache(zkclient, "/rmi", false);
cache.start();
System.out.println("监听开始/zk........");
PathChildrenCacheListener plis = new PathChildrenCacheListener() {
@Override
public void childEvent(CuratorFramework client, PathChildrenCacheEvent event) throws Exception {
switch (event.getType()) {
case CHILD_ADDED: {
System.out.println("Node added: " + ZKPaths.getNodeFromPath(event.getData().getPath()));
break;
}
case CHILD_UPDATED: {
System.out.println("Node changed: " + ZKPaths.getNodeFromPath(event.getData().getPath()));
break;
}
case CHILD_REMOVED: {
System.out.println("Node removed: " + ZKPaths.getNodeFromPath(event.getData().getPath()));
break;
}
}
}
};
// 注册监听
cache.getListenable().addListener(plis);
}
}
执行命令窗口截图:
事件监听效果截图:
如何使用Curator操作zookeeper
ZooKeeper系列之二:Zookeeper常用命令
- 大小: 39.8 KB
- 大小: 49.2 KB
分享到:
相关推荐
**监听Zookeeper节点变化** Zookeeper的一大特性就是支持事件监听。我们可以通过注册Watcher对象来监听节点的变化,例如数据的修改或者节点的创建、删除等。当发生这些事件时,Watcher的`process()`方法会被调用。...
Curator 提供了事件监听器,可以注册到 ZooKeeper 路径上,当该路径下发生创建、删除、数据改变等事件时,监听器会被触发。这在分布式系统中非常有用,例如监控配置变化、节点状态变更等。 四、Curator 实现分布式...
3. **事件通知**:Zookeeper提供watcher机制,允许客户端设置监听某个节点的变化,当节点状态发生变化时,Zookeeper会立即通知相关客户端,实现快速响应。 4. **会话管理**:Zookeeper维护客户端的会话状态,如果...
在Zookeeper中,监听器(Listener)机制是其非常重要的一个特性,它允许用户监听某个数据节点的变化,并且能够在数据变化的时候得到通知。本文将会深入解析Zookeeper监听器的工作原理,以及如何利用监听器来监控数据...
不仅如此,Viper还支持读取环境变量、监听配置文件变动、从远程配置系统(如etcd和Consul)获取配置,并能响应这些配置的实时变化。然而,尽管Viper功能丰富,但它并不直接支持从Zookeeper中读取和监听配置。 ...
为了更好地理解Watcher的使用,下面我们将通过一个简单的Java程序来创建一个Watcher并监听Zookeeper上的数据节点。 首先,我们需要在`pom.xml`中引入Zookeeper的依赖: ```xml <groupId>org.apache.zookeeper ...
4. **客户端感知**:Web客户端通过监听Zookeeper节点的变化来实时更新总服务器的信息。 **具体实现步骤**如下: - 搜索引擎服务器在Zookeeper中创建临时节点,并存储自己的主机名。 - 总服务器获取这些临时节点的...
2. **Watcher**: Watcher是Zookeeper的事件监听机制,可以设置对特定Znode的监听,当该节点状态发生变化时,Watcher会接收到通知。 3. **会话(Session)**: 用户与Zookeeper服务器之间的连接称为会话,会话期间,...
4. 服务缓存:为了提高效率,`ServiceCache`可以缓存特定服务的实例列表,监听Zookeeper的变化并保持最新。启动`ServiceCache`并调用`getInstance()`或`getAllInstances()`获取服务实例。 Curator的`ServiceCache`...
7. 监听器注册:设置监听器来监听ZNode的变化,当ZNode的数据、子节点或权限发生改变时,客户端会收到通知。 8. 会话事件处理:处理会话相关的事件,如会话创建、会话丢失或重新建立。 通过运行ZKtest,我们可以...
- **Watcher 事件监听**:Zookeeper 支持 Watcher 机制,允许客户端注册监听特定节点的变化,当节点发生变化时,Zookeeper 会触发回调通知客户端。 ### 2. ZooKeeper 的功能 - **命名服务**:为分布式组件提供唯一...
3. **Watcher**:ZooKeeper提供了一种事件监听机制,称为Watcher,允许客户端注册对特定ZNode的兴趣,当ZNode状态发生变化时,ZooKeeper会通知相应的客户端。 **ZooKeeper的工作原理** 1. **主备选举(Leader ...
Watcher 是一种事件监听机制,可以注册在 Znode 上,当 Znode 发生变化时,Watcher 将接收到通知。 在 Zookeeper-3.8.0 中,主要包含以下组件和目录: 1. bin:包含了启动和停止 Zookeeper 服务的脚本,如 zk...
- **watcher事件**: 客户端注册在特定Znode上的监听器,当Znode有变化时,Zookeeper会触发事件通知给客户端。 2. **Zookeeper操作** - **创建节点(create)**: 创建新的Znode,并可以设置数据、权限和是否持久化...
通过监听ZooKeeper上的节点变化,我们可以实现对服务状态变化的响应,例如,当新主节点选举成功后,可以触发相应的回调函数,更新服务列表或者重新分配任务。 总结起来,ZooKeeper通过其强大的一致性保证和选举机制...
ZooKeeper 提供了Watcher机制,可以注册监听事件,当特定节点的状态发生变化时,会触发回调通知。 在部署 ZooKeeper 时,通常采用集群模式,由多个服务器节点组成,称为 Ensemble。每个节点都是平等的,能够互相...
// 在这里处理节点变化事件 } // 添加监听器 zoo_add_listener(zh, watcher_func, NULL); ``` 3. 获取指定节点信息:使用 `zoo_aexists` 或 `zoo_aget` 可以获取节点的状态和数据。例如,获取节点数据: ```cpp ...
Watch 是 ZooKeeper 的一个重要特性,它允许客户端设置监听器(Watch)在特定 ZNode 上,当该 ZNode 发生改变(如数据更新、被删除或子节点变更)时,ZooKeeper 会向客户端发送一个事件通知。然而,Watch 是一次性...
2. **服务发现**:服务消费者通过监听ZooKeeper上的特定路径,一旦有新的服务提供者节点创建或删除,ZooKeeper会发送事件通知。服务消费者根据接收到的事件,更新本地的服务提供者列表。 3. **负载均衡策略**:服务...
- **配置动态加载**:考虑到配置的动态更新,可以监听配置文件的变化,实时刷新IP黑白名单列表。 - **性能优化**:为了避免频繁的文件读取影响性能,可以采用缓存策略,如使用ConcurrentHashMap存储已读取的IP规则...