`

zookeeper客户端Curator

 
阅读更多

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使用代码

    Zookeeper客户端Curator Framework是Apache Zookeeper项目的一个高级封装库,它为开发者提供了一系列便捷的API,使得操作Zookeeper变得更加简单。本篇文章将深入探讨Curator Framework的主要功能、使用方法以及示例...

    zookeeper客户端curator操作示例

    而Apache Curator是Facebook开源的一个ZooKeeper客户端库,它提供了更高级别的API,简化了ZooKeeper的使用,并增加了诸如连接管理、重试策略、事务操作等功能。 在Java开发中,Curator是使用ZooKeeper最常用且推荐...

    zookeeper开源客户端Curator

    Curator是Netflix公司开源的一套ZooKeeper客户端框架,Curator解决了很多ZooKeeper客户端非常底层的细节开发工作,包括连接重连、反复注册Watcher和NodeExistsException异常等,实现了Fluent风格的API接口,目前已经...

    Zookeeper开源客户端框架Curator简介与示例

    Curator 是一个基于 ZooKeeper 的开源客户端框架,它为 ZooKeeper 提供了高级抽象和功能,使得开发人员能够更方便地使用 ZooKeeper。 **Curator 框架概述** Curator 包含多个模块,如 ZooKeeper 客户端连接管理、...

    curator-example:ZooKeeper 客户端 Curator 示例

    `curator-example` 是一个基于 Apache ZooKeeper 的 Java 客户端库 —— Apache Curator 的示例项目。这个项目旨在帮助开发者更好地理解和使用 Curator 提供的各种功能,以实现与 ZooKeeper 的高效交互。ZooKeeper ...

    Zookeeper-Java客户端Curator

    Zookeeper_Java客户端Curator

    zookeeper 使用 Curator 示例监听、分布式锁

    Curator 是 Apache ZooKeeper 的一个客户端库,提供了丰富的工具和模式,简化了 ZooKeeper 的使用。本示例将详细介绍如何利用 Curator 在 ZooKeeper 上进行数据操作以及实现分布式锁。 一、ZooKeeper 与 Curator 的...

    springboot-zookeeper-curator.rar

    而Curator是Facebook贡献的Zookeeper客户端库,它对Zookeeper的API进行了封装,提供了更高级别的抽象,降低了开发人员使用Zookeeper的难度。 要将SpringBoot与Zookeeper Curator整合,首先你需要在你的项目中添加...

    zookeeper源码分析

    第1章 【开宗明义】纵观全貌 第2章 ZooKeeper之序列化组件源码解析【透视现象,直击本质】 第4章 持久化【高手过招必备】 第6章 服务器启动 【由浅入深,先学好单机版,才能...第11章 Zookeeper客户端Curator 资料.zip

    zookeeper客户端 图形化界面

    4. Curator:Facebook开源的Zookeeper客户端库,其中包含了一个简单的图形化界面工具。 四、安装与使用 1. 安装:根据所选择的图形化工具,通常需要将其部署在服务器上,并确保与Zookeeper集群通信正常。 2. 配置...

    项目加入zookeeper的依赖包(Curator框架)

    例如,创建一个Zookeeper客户端可以这样做: ```java import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.CuratorFrameworkFactory; import org.apache.zookeeper.ZooDefs...

    ZooKeeper-Curator:zookeeper的curator客户端

    ZooKeeper-Curator是Apache ZooKeeper的一个高级客户端,它提供了许多实用工具和抽象,使得与ZooKeeper交互变得更加简单和可靠。ZooKeeper是一个分布式协调服务,广泛用于管理分布式应用程序的状态,实现一致性、...

    zookeeper客户端与服务器管理包

    一、Apache Curator:Zookeeper客户端的利器 Apache Curator是Apache软件基金会的一个项目,它为Zookeeper提供了丰富的Java客户端库,简化了与Zookeeper交互的复杂性。在`apache-curator-2.5.0-source-release.zip`...

    zk客户端curator2.11

    客户端是Curator Framework,是Apache的项目,它主要的功能是为ZK的客户端使用提供了高可用的封装。在Curator Framework基础上封装的curator-recipes,实现了很多经典场景。比如:集群管理(Leader选举)、共享锁、...

    VIP-02 Zookeeper客户端使用与集群特性(1)

    下面是一个简单的Java类示例,展示了如何使用Curator创建一个ZooKeeper客户端实例: ```java import org.apache.curator.RetryPolicy; import org.apache.curator.framework.CuratorFramework; import org.apache....

    curator zookeeper 3.4.6 2.9.1

    而Curator则是Zookeeper的一个客户端库,为开发者提供了更高级别的抽象和工具,简化了Zookeeper的使用。 Zookeeper 3.4.6是其稳定且广泛采用的一个版本,它提供了丰富的API和强大的一致性模型。在这个版本中,...

    zookeeper学习之三(Curator客户端)

    本篇文章将专注于ZooKeeper的客户端——Curator,这是一个由Apache提供的Java库,旨在简化与ZooKeeper的交互。 Curator客户端是Apache Curator框架的一部分,该框架为开发人员提供了一系列高级API和工具,用于处理...

    5、zookeeper的java -Curator(服务注册与发现)

    在Java环境中,Curator是一个优秀的Zookeeper客户端库,简化了与Zookeeper的交互,包括服务注册与发现。本文将深入探讨如何利用Curator实现这一功能。 首先,Curator提供了一套完整的API来抽象服务注册与发现,包括...

    zookeeper客户端工具

    zookeeper客户端工具,下载到本地后请使用ide工具进行编译,运行工程目录下的\zooinspector-master\target\zooinspector-pkg\bin里的bat或者sh。即可使用。

    浅谈Zookeeper开源客户端框架Curator

    Curator是一个基于Zookeeper的开源客户端框架,由Netflix开发,旨在解决Zookeeper客户端使用过程中的各种问题。Curator提供了封装ZooKeeper client与ZooKeeper server之间的连接处理、提供了一套Fluent风格的操作API...

Global site tag (gtag.js) - Google Analytics