Curator是zookeeper的客户端之一,以下通过模拟实现dubbo-Admin的功能来介绍Curator.
我们都知道,dubbo一般都使用zk来做目录服务,dubbo在zk上注册的根节点就“/dubbo”,所以我们通过节点查询来实现查询和监控服务状态。
1.引入curator
<dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>2.8.0</version> </dependency>
2.构造zk的链接
package com.zk; import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.CuratorFrameworkFactory; import org.apache.curator.retry.ExponentialBackoffRetry; public class ZkClientFactory { private static CuratorFramework client; //构造全局的zk链接对象。当然也可以通过配置增加更多的参数 public static CuratorFramework getInstance(String url){ if(null == client){ synchronized(ZkClientFactory.class){ if(null == client){ CuratorFrameworkFactory.Builder builder = CuratorFrameworkFactory.builder(); client = builder.connectString(url) .sessionTimeoutMs(3000) .connectionTimeoutMs(3000) .canBeReadOnly(false) .retryPolicy(new ExponentialBackoffRetry(1000, Integer.MAX_VALUE)) .namespace(null) .defaultData(null) .build(); client.start(); } } } return client; } }
3.查询dubbo服务并打印
package com.zk; import java.net.URLDecoder; import java.util.List; import org.apache.curator.framework.CuratorFramework; public class DubboAdmin { private static final String ZK_ADDRESS = "127.0.0.1:2182"; private static String serverName = "MyService"; private static CuratorFramework client = ZkClientFactory.getInstance(ZK_ADDRESS); public static void main(String[] args) throws Exception { List<String> services = client.getChildren().forPath("/dubbo"); if(null == services || services.isEmpty()){ System.out.println("No service in Zk..."); System.exit(1); } System.out.println("Search Service ["+serverName+"] start..."); for(String str : services){ if(str.contains(serverName)){ printDetail(str); } } System.out.println("Search Service ["+serverName+"] end." ); } //打印单个服务节点信息 private static void printDetail(String str) throws Exception{ System.out.println("=================================="); System.out.println("CurrentNode is:"+ str); List<String> children = client.getChildren().forPath("/dubbo/"+str); for(String child :children){ List<String> nodes = client.getChildren().forPath("/dubbo/"+str+"/"+child); System.out.println(" NodeName:"+child); for(String node :nodes){ System.out.println(" "+URLDecoder.decode(node)); } } } }
4.打印结果
Search Service [CouponService] start...
==================================
CurrentNode is:com.service.MyService
NodeName:consumers
NodeName:routers
NodeName:providers
dubbo://192.168.62.85:20882/com......
dubbo://192.168.62.85:23333/com......
NodeName:configurators
==================================
存在的疑问:
client.start();这个方法调后,会起线程去连zk,不管是否连接成功,client的状态都已经是started.无法判断连接状态。如果连接未成功,执行任何操作都会被阻塞。那怎么在应用启动时判断是否连接成功?
相关推荐
Zookeeper客户端Curator Framework是Apache Zookeeper项目的一个高级封装库,它为开发者提供了一系列便捷的API,使得操作Zookeeper变得更加简单。本篇文章将深入探讨Curator Framework的主要功能、使用方法以及示例...
而Apache Curator是Facebook开源的一个ZooKeeper客户端库,它提供了更高级别的API,简化了ZooKeeper的使用,并增加了诸如连接管理、重试策略、事务操作等功能。 在Java开发中,Curator是使用ZooKeeper最常用且推荐...
Curator是Netflix公司开源的一套ZooKeeper客户端框架,Curator解决了很多ZooKeeper客户端非常底层的细节开发工作,包括连接重连、反复注册Watcher和NodeExistsException异常等,实现了Fluent风格的API接口,目前已经...
Curator 是一个基于 ZooKeeper 的开源客户端框架,它为 ZooKeeper 提供了高级抽象和功能,使得开发人员能够更方便地使用 ZooKeeper。 **Curator 框架概述** Curator 包含多个模块,如 ZooKeeper 客户端连接管理、...
`curator-example` 是一个基于 Apache ZooKeeper 的 Java 客户端库 —— Apache Curator 的示例项目。这个项目旨在帮助开发者更好地理解和使用 Curator 提供的各种功能,以实现与 ZooKeeper 的高效交互。ZooKeeper ...
Zookeeper_Java客户端Curator
Curator 是 Apache ZooKeeper 的一个客户端库,提供了丰富的工具和模式,简化了 ZooKeeper 的使用。本示例将详细介绍如何利用 Curator 在 ZooKeeper 上进行数据操作以及实现分布式锁。 一、ZooKeeper 与 Curator 的...
而Curator是Facebook贡献的Zookeeper客户端库,它对Zookeeper的API进行了封装,提供了更高级别的抽象,降低了开发人员使用Zookeeper的难度。 要将SpringBoot与Zookeeper Curator整合,首先你需要在你的项目中添加...
第1章 【开宗明义】纵观全貌 第2章 ZooKeeper之序列化组件源码解析【透视现象,直击本质】 第4章 持久化【高手过招必备】 第6章 服务器启动 【由浅入深,先学好单机版,才能...第11章 Zookeeper客户端Curator 资料.zip
4. Curator:Facebook开源的Zookeeper客户端库,其中包含了一个简单的图形化界面工具。 四、安装与使用 1. 安装:根据所选择的图形化工具,通常需要将其部署在服务器上,并确保与Zookeeper集群通信正常。 2. 配置...
例如,创建一个Zookeeper客户端可以这样做: ```java import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.CuratorFrameworkFactory; import org.apache.zookeeper.ZooDefs...
ZooKeeper-Curator是Apache ZooKeeper的一个高级客户端,它提供了许多实用工具和抽象,使得与ZooKeeper交互变得更加简单和可靠。ZooKeeper是一个分布式协调服务,广泛用于管理分布式应用程序的状态,实现一致性、...
一、Apache Curator:Zookeeper客户端的利器 Apache Curator是Apache软件基金会的一个项目,它为Zookeeper提供了丰富的Java客户端库,简化了与Zookeeper交互的复杂性。在`apache-curator-2.5.0-source-release.zip`...
客户端是Curator Framework,是Apache的项目,它主要的功能是为ZK的客户端使用提供了高可用的封装。在Curator Framework基础上封装的curator-recipes,实现了很多经典场景。比如:集群管理(Leader选举)、共享锁、...
下面是一个简单的Java类示例,展示了如何使用Curator创建一个ZooKeeper客户端实例: ```java import org.apache.curator.RetryPolicy; import org.apache.curator.framework.CuratorFramework; import org.apache....
而Curator则是Zookeeper的一个客户端库,为开发者提供了更高级别的抽象和工具,简化了Zookeeper的使用。 Zookeeper 3.4.6是其稳定且广泛采用的一个版本,它提供了丰富的API和强大的一致性模型。在这个版本中,...
本篇文章将专注于ZooKeeper的客户端——Curator,这是一个由Apache提供的Java库,旨在简化与ZooKeeper的交互。 Curator客户端是Apache Curator框架的一部分,该框架为开发人员提供了一系列高级API和工具,用于处理...
在Java环境中,Curator是一个优秀的Zookeeper客户端库,简化了与Zookeeper的交互,包括服务注册与发现。本文将深入探讨如何利用Curator实现这一功能。 首先,Curator提供了一套完整的API来抽象服务注册与发现,包括...
zookeeper客户端工具,下载到本地后请使用ide工具进行编译,运行工程目录下的\zooinspector-master\target\zooinspector-pkg\bin里的bat或者sh。即可使用。
Curator是一个基于Zookeeper的开源客户端框架,由Netflix开发,旨在解决Zookeeper客户端使用过程中的各种问题。Curator提供了封装ZooKeeper client与ZooKeeper server之间的连接处理、提供了一套Fluent风格的操作API...