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:Object.prototype.toString进行数据类型判定
在JavaScript中,想要判断某个对象值属于哪种内置类型,最靠谱的做法就是通过Object.prototype.toString方法. var arr = []; console.log(Obje ...
- iOS开发之使用AFN上传图片
//1.创建管理者对象 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; manager.responseSerializ ...
- oracle ORA-12545:因目标主机或对象不存在
解决方法: 1.首先从最基本的入手,这里打开计算机右击,选择管理 2. 找到里面的服务和应用程序,打开服务 3.找到: OracleOraDb11g_home1TNSListener OracleSe ...
- C语言 面试
P1(多选)有如下定义 int a; int *b; 则下列哪些语句是正确的:A: b=&a;B: b=*a;C: b=(int*)a;D: *b=a; 思路如下:b是一个int类型指针,a是 ...
- 继承log4.net的类
using System; using System.Diagnostics; [assembly: log4net.Config.XmlConfigurator(Watch = true)] nam ...
- JSON 文件格式解析
JSON 文件大致说明 JSON 文件你可以理解为就是一个字典文件. 格式为 { 索引:数据, 索引:{ 索引:数据, 索引:{ 索引:数据, 索引:数据 } } } 自己写一个 my.json { ...
- jquery.autocomplete 传参问题
今天遇到一个问题,我需要传一个文本库的内容给后台,然后用autocomplete显示内容,开始觉得很简单 不就是 function SalePrice_Complete(text) { //分割拿到索 ...
- nginx的 keepalive_timeout参数是一个请求完成之后还要保持连
keepalive_timeout参数是一个请求完成之后还要保持连接多久,不是请求时间多久,目的是保持长连接,减少创建连接过程给系统带来的性能损耗,类似于线程池,数据库连接池. [root@web01 ...
- python ascii codec can't decode
提示错误: UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 240: ordinal not in range ...
- java-----四种引用
java的四种引用,强弱软虚,用到的场景 标签: java的引用 强弱软虚 2016-05-11 22:59 1237人阅读 评论(0) 收藏 举报 1.强引用(StrongReference) 强引 ...