网站空间可以转移吗个人简历word免费模板
网站空间可以转移吗,个人简历word免费模板,推进网站建设,肥城住房和城乡建设局网站系列#xff1a; zookeeper快速入门一#xff1a;zookeeper安装与启动-CSDN博客
zookeeper快速入门二#xff1a;zookeeper基本概念-CSDN博客
zookeeper快速入门三#xff1a;zookeeper的基本操作
zookeeper快速入门四#xff1a;在java客户端中操作zookeeper-CSDN博客…系列 zookeeper快速入门一zookeeper安装与启动-CSDN博客
zookeeper快速入门二zookeeper基本概念-CSDN博客
zookeeper快速入门三zookeeper的基本操作
zookeeper快速入门四在java客户端中操作zookeeper-CSDN博客 经过前面四章的讲解我们已经对zookeeper建立起初步的概念这篇文章就来做一个小小的实践用zookeeper实现一个简单版的服务注册与发现中心。
zookeeper的一个常见功能就是作为服务注册与发现中心。
我们先创建一个节点/services。 Stat stat zkClient.exists(/services,false);if (stat null ){zkClient.create(/services,.getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);}
每当有一个服务上线时我们就向我们的服务注册与发现中心zookeeper注册我们的应用。
比如我们注册一个user服务服务地址是localhost:8080那么我们就在/services下面建立一个user子节点子节点数据为user服务的真实url地址比如localhost:8080子节点类型为临时节点。 public void registerService()throws Exception{zkClient.create(/services/user,localhost:8080.getBytes(),ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL);}
当我们向user请求服务时首先通过/services节点获取user服务判断user服务是否存在。进而获取它的地址发起真正的请求。同时我们注册一个监听事件监听节点的状态变化。当user服务出现故障或其他因素而下线时/services/user节点会被删除zookeeper server会通知到监听这个节点的客户端从而使客户端做出自己的响应同样的当user服务上线或地址修改客户端也能收到通知。 public void invokeUserService()throws Exception{Stat stat zkClient.exists(/services/user,false);if (stat null){System.out.println(未能找到user服务服务未注册或已下线);}byte[] url zkClient.getData(/services/user, new Watcher() {Overridepublic void process(WatchedEvent watchedEvent) {if (watchedEvent.getType() Event.EventType.NodeDeleted){System.out.println(服务下线);
// 处理业务逻辑}if (watchedEvent.getType() Event.EventType.NodeCreated){System.out.println(服务上线);
// 处理业务逻辑}if (watchedEvent.getType() Event.EventType.NodeDataChanged){System.out.println(服务地址修改了);}}}, null);
// 处理业务逻辑System.out.println(向new String(url)发起请求);} 如果对前面有印象的话应该记得zookeeper的watcher只触发一次当节点状态改变一次之后节点状态的第二次改变就不能监听到了。为了能够持续监听我们需要修改一下我们的代码。
我们把判断服务上线的代码挪到上面来并且在下面的监听事件里回调invokeUserService方法实现持续监听的功能。
为了简单易懂这里代码写得并不够好如果是实际项目需要再做点拆分与封装。 public void invokeUserService()throws Exception{Stat stat zkClient.exists(/services/user,false);if (stat null){System.out.println(未能找到user服务服务未注册或已下线);zkClient.exists(/services/user, new Watcher() {Overridepublic void process(WatchedEvent watchedEvent) {if (watchedEvent.getType() Event.EventType.NodeCreated){System.out.println(服务上线);
// 处理业务逻辑}}});}else{byte[] url zkClient.getData(/services/user, new Watcher() {Overridepublic void process(WatchedEvent watchedEvent) {if (watchedEvent.getType() Event.EventType.NodeDeleted){System.out.println(服务下线);
// 处理业务逻辑}if (watchedEvent.getType() Event.EventType.NodeDataChanged){System.out.println(服务地址修改了);}try {invokeUserService();}catch (Exception e){}}}, null);
// 处理业务逻辑System.out.println(向new String(url)发起请求);}} zookeeper作为一个分布式协调框架它的创建就是为了方便或者简化分布式应用的开发。除了服务注册与发现之外它还能够提供更多的功能但是对于入门来说简单的了解到这里就已经足够了。下面会讲zookeeper的架构设计与原理比如zookeeper的原子协议leader选举算法等。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/86809.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!