11.Curator扩展库
1.curator-x-discovery介绍
base path|_______ service A name|__________ instance 1 id --> (serialized ServiceInstance)|__________ instance 2 id --> (serialized ServiceInstance)|__________ ...|_______ service B name|__________ instance 1 id --> (serialized ServiceInstance)|__________ instance 2 id --> (serialized ServiceInstance)|__________ ...|_______ ...

/*** Return an instance for a single use. <b>IMPORTANT: </b> users* should not hold on to the instance returned. They should always get a fresh instance.** @return the instance to use* @throws Exception any errors*/public ServiceInstance<T> getInstance() throws Exception;/*** Return the current available set of instances <b>IMPORTANT: </b> users* should not hold on to the instance returned. They should always get a fresh list.** @return all known instances* @throws Exception any errors*/public Collection<ServiceInstance<T>> getAllInstances() throws Exception;


2.低级别的API介绍
/*** Register/re-register a service 注册服务** @param service service to add* @throws Exception errors*/public void registerService(ServiceInstance<T> service) throws Exception;/*** Unregister/remove a service instance 取消注册服务** @param service the service* @throws Exception errors*/public void unregisterService(ServiceInstance<T> service) throws Exception;
/*** Return the names of all known services** @return list of service names* @throws Exception errors*/public Collection<String> queryForNames() throws Exception;/*** Return all known instances for the given service** @param name name of the service* @return list of instances (or an empty list)* @throws Exception errors*/public Collection<ServiceInstance<T>> queryForInstances(String name) throws Exception;/*** Return a service instance POJO** @param name name of the service* @param id ID of the instance* @return the instance or <code>null</code> if not found* @throws Exception errors*/public ServiceInstance<T> queryForInstance(String name, String id) throws Exception;
/*** Return the current list of instances. NOTE: there is no guarantee of freshness. This is* merely the last known list of instances. However, the list is updated via a ZooKeeper watcher* so it should be fresh within a window of a second or two.** @return the list*/public List<ServiceInstance<T>> getInstances();
/*** Listener for changes to a service cache*/public interface ServiceCacheListener extends ConnectionStateListener{/*** Called when the cache has changed (instances added/deleted, etc.)*/public void cacheChanged();}
3.curator-x-discovery使用实例
@JsonRootName("details")public class InstanceDetails{/** 服务说明信息 */private String description;public InstanceDetails(String description){this.description = description;}public void setDescription(String description){this.description = description;}public String getDescription(){return description;}@Overridepublic String toString(){return "InstanceDetails [description=" + description + "]";}}
public class ExampleServer implements Closeable{private final ServiceDiscovery<InstanceDetails> serviceDiscovery;//发现服务的实例类private final ServiceInstance<InstanceDetails> thisInstance;//服务注册信息实例public ExampleServer(CuratorFramework client, String path, String serviceName, String description) throws Exception{UriSpec uriSpec = new UriSpec("{scheme}://foo.com:{port}");thisInstance = ServiceInstance.<InstanceDetails>builder().name(serviceName).payload(new InstanceDetails(description)).port(12345).uriSpec(uriSpec).build();JsonInstanceSerializer<InstanceDetails> serializer = new JsonInstanceSerializer<InstanceDetails>(InstanceDetails.class);serviceDiscovery = ServiceDiscoveryBuilder.builder(InstanceDetails.class).client(client).basePath(path).serializer(serializer).thisInstance(thisInstance).build();}public ServiceInstance<InstanceDetails> getThisInstance(){return thisInstance;}public void start() throws Exception{serviceDiscovery.start();}@Overridepublic void close() throws IOException{CloseableUtils.closeQuietly(serviceDiscovery);}}
public class DiscoveryExample{public static void main(String[] args) throws Exception{String basePath = "/discoverys";BufferedReader in = new BufferedReader(new InputStreamReader(System.in));CuratorFramework client = CuratorFrameworkFactory.newClient("127.0.0.1:2181", new RetryNTimes(10, 5000));client.start();ExampleServer exampleServer = new ExampleServer(client, basePath, "serviceName01", "服务说明");exampleServer.start();getAllService();System.out.println("服务已启动!输入回车关闭服务:");in.readLine();exampleServer.close();getAllService();System.out.println("服务已关闭!输入回车关闭连接:");in.readLine();client.close();System.out.println("连接已关闭!");System.out.println("OK!");}//遍历所有服务实例private static void getAllService() throws Exception{CuratorFramework client = CuratorFrameworkFactory.newClient("127.0.0.1:2181", new RetryNTimes(10, 5000));client.start();JsonInstanceSerializer<InstanceDetails> serializer = new JsonInstanceSerializer<InstanceDetails>(InstanceDetails.class);ServiceDiscovery<InstanceDetails> serviceDiscovery = ServiceDiscoveryBuilder.builder(InstanceDetails.class).client(client).basePath("/discoverys").serializer(serializer).build();serviceDiscovery.start();Collection<String> serviceNames = serviceDiscovery.queryForNames();// 获取所有的服务名称for(String serviceName : serviceNames){// 获取所有相同服务名称的所有服务实例Collection<ServiceInstance<InstanceDetails>> instances = serviceDiscovery.queryForInstances(serviceName);System.out.println(serviceName);for (ServiceInstance<InstanceDetails> instance : instances){System.out.println("\t" + instance);}}serviceDiscovery.close();client.close();}}
serviceName01ServiceInstance{name='serviceName01', id='bb766181-4e7a-423a-974a-8ac840a9ea08', address='192.168.4.232', port=12345, sslPort=null, payload=InstanceDetails [description=服务说明], ...}ServiceInstance{name='serviceName01', id='298c5dc6-c431-41cb-8e74-6abbefecd2ee', address='192.168.4.232', port=12345, sslPort=null, payload=InstanceDetails [description=服务说明], ...}服务已启动!输入回车关闭服务:serviceName01ServiceInstance{name='serviceName01', id='298c5dc6-c431-41cb-8e74-6abbefecd2ee', address='192.168.4.232', port=12345, sslPort=null, payload=InstanceDetails [description=服务说明], ...}服务已关闭!输入回车关闭连接:连接已关闭!OK!
base path|_______ service A name|__________ instance 1 id --> (serialized ServiceInstance)|__________ instance 2 id --> (serialized ServiceInstance)|__________ ...|_______ service B name|__________ instance 1 id --> (serialized ServiceInstance)|__________ instance 2 id --> (serialized ServiceInstance)|__________ ...|_______ ...
4.其他扩展介绍
-------------------------------------------------------------------------------------------------------------------------------
11.Curator扩展库的更多相关文章
- PHP mysqli 扩展库(面向对象/数据库操作封装/事务控制/预编译)
1.和mysql扩展库的区别: (1 安全性.稳定性更高 (2 提供了面向对象和面向过程两种风格 2.php.ini 中的 extension=php_mysqli.dll 解除封印 3.面 ...
- PHP基础Mysql扩展库
mysql扩展库操作步骤如下: 1.连接数据库 2.选择数据库 3.设置操作编码 4.发送指令sql,并返回结果集 ddl:数据定义语句 dml:数据操作语句 dql:数据查询 ...
- centos下不重装php——给PHP添加新扩展库
装完php.发现需要一些新扩展库比如常见的mysqli之类的.在不重装php安装新扩展,以一个不常用的库xsl为例. 环境:centos6.8,php5.3.29 ,osx10.11.6 我的php相 ...
- php mysqli扩展库之预处理操作
分享下php使用mysqli扩展库进行预处理操作的二个例子,有意研究mysqli用法的朋友,可以参考学习下,一定会有所帮助的. 例1.使用mysqli扩展库的预处理技术 mysqli stmt 向数据 ...
- 树莓派安装opencv3及其扩展库
https://www.cnblogs.com/Pyrokine/p/8921285.html 目标编译针对python的opencv以及扩展库 环境树莓派4和3B+都可以python3.7.3 py ...
- Layman 使用ffmpeg-php扩展库实现视频截图(默认图)
这几天做项目,其中一个需求是用户上传视频文件到服务器,然后服务器自动截取该视频的一帧作为该视频对应的缩略图,服务器端语言采用php编写,找了半天资料,发现ffmpeg-php可以满足该需求,所以下面简 ...
- PHP的SPL扩展库(一)数据结构
SPL 库也叫做 PHP 标准库,主要就是用于解决典型问题的一组接口或类的集合.这些典型问题包括什么呢?比如我们今天要讲的数据结构,还有一些设计模式的实现,就像我们之前讲过的观察者模式相关的接口在 S ...
- Z.ExtensionMethods 一个强大的开源扩展库
今天有意的在博客园里面搜索了一下 Z.ExtensionMethods 这个扩展类库,确发现只搜到跟这个真正相关的才两篇博文而已,我都点进去看了一下,也都只是提到而已,没有专门介绍,才引起我写这篇文档 ...
- PHP使用mysqli扩展库实现增删改查(面向对象版)
mysqli扩展库是mysql扩展库的改进版本,在mysql扩展库的基础上提高了稳定性和效率,mysqli扩展库有两套东西,一套就是面向过程的mysqli另一套是面向对象的mysqli.操作方式大体和 ...
随机推荐
- nginx Beginner’s Guide
这个引导给nginx做了一个基本的介绍,并描述了nginx可以做的一些基本事情. 假设nginx已经安装在了读者的电脑上,如果没有请查看官网安装页. 这个引导描述了怎么去开始和结束nginx,从新加载 ...
- atitit.Oracle 9 10 11 12新特性attilax总结
atitit.Oracle 9 10 11 12新特性 1. ORACLE 11G新特性 1 1.1. oracle11G新特性 1 1.2. 审计 1 1.3. 1. 审计简介 1 1.4. ...
- 用React Native编写跨平台APP
用React Native编写跨平台APP React Native 是一个编写iOS与Android平台实时.原生组件渲染的应用程序的框架.它基于React,Facebook的JavaScript的 ...
- redis储存中文,客服端读取出现乱码
[root@cache03 ~]# redis-cli -h 192.168.1.112 -p 6379 192.168.1.112:6379> set chen 陈林 OK 192.168.1 ...
- Java类的实例化的初始化过程
A a = new A(); new 创建对象过程: 1.类加载 代码验证 2.给对象在内存(堆)中分配空间(给属性赋值): 3.属性赋默认值: byte,short.int,long -&g ...
- Nginx 1.5.2 + PHP 5.5.1 + MySQL 5.6.10 在 CentOS 下的编译安装
最近配置了几台Web服务器,将安装笔记贴出来吧.没时间像以前那样,将文章写的那样系统了,请见谅.详细配置,可以看以前的旧文章: http://blog.zyan.cc/nginx_php_v6 .安装 ...
- Hystrix使用Commond的三种方式
目录(?)[-] 1 依赖引入 2 使用 21 Hystrix command 211 同步执行 212 异步执行 213 反应执行 214 三种模式使用区别 22 Fallback 23 Error ...
- FreeRtos——任务删除,改变任务优先级
以下转载自安富莱电子: http://forum.armfly.com/forum.php vTaskDelete() API 函数任务可以使用 API 函数 vTaskDelete()删除自己或其它 ...
- lua工具库penlight--04路径和目录
使用路径 程序不应该依赖于奇葩的系统,这样你的代码会难以阅读和移植.最糟糕的是硬编码的路径, windows和Unix的路径分隔符正好相反.最好使用path.join,它可以帮助你解决这个问题. pl ...
- AM335x 添加 HUAWEI MU609 Mini PCIe Module,并用pppd 启动相关设备
kernel 的配置 kernel 3.2.0 make menuconfig Device Drivers ---> [*] USB support ---> <*> USB ...