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.操作方式大体和 ...
随机推荐
- Javascript中window.opener的一点小总结
以前一直认为window.opener只有在window.open方法打开下的窗口才可以访问,没想到即使是a链接打开的页面的照样可以访问.window.opener指向父窗口,也就是来源窗口.可以利用 ...
- C++知识点 笔试常见
C++知识点 一.#include “filename.h”和#include <filename.h>的区别 #include “filename.h”是指编译器将从当前工作目录上开 ...
- 连接SQLServer的增删改查方法代码
在Visual C++中用ADO进行数据库编程 1. 生成应用程序框架并初始化OLE/COM库环境 创建一个标准的MFC AppWizard(exe)应用程序CADOConnection,然后在使用A ...
- 怎样在tsung中使用动态參数(二)
上一篇博客说过,在配置getOrderId请求时,能够用动态变量(order_id)解析和捕获服务端返回的json对象.这个变量能够作为接下来的订单确认请求(Confirm)的输入參数.看一下Conf ...
- atitit.产品console 日志的aticonsole 方案处理总结
atitit.产品console 日志的aticonsole 方案处理总结 1. 主要原理流程 1 2. 调用代码 1 3. 内部主要实现 1 3.1. 放入消息 1 3.2. 读取消息 2 默认可以 ...
- Torch实现ReQU,和梯度验证
重写函数 我们使用torch实现我们自己的ReQU模块.在实现一个新的layer之前,我们必须了解,我们并不是重写forward和backward方法,而是重写里面调用的其它方法. 1)又一次upda ...
- HttpURLConnection上传文件
HttpURLConnection上传文件 import java.io.BufferedReader; import java.io.DataInputStream; import java.io. ...
- Java 之泛型通配符 ? extends T 与 ? super T 解惑
简述 大家在平时的工作学习中, 肯定会见过不少如下的语句: List<? super T> List<? extends T> 我们都知道, 上面的代码时关于 Java 泛型的 ...
- android圆形图像
在网上找了一下,最简单的是利用canvas的setXfermode,来控制图片重合部分的显示策略. 图片混合时,先画的是dst,后画的是src,各种混合的方式如下,其中圆形是dst,正方形是src: ...
- PHP——分页显示数据库内容
test.php <?php header("Content-Type:text/html;charset=utf-8"); //加载分页类 include "pa ...