基于Zookeeper实现简易版服务的注册与发现机制

基于Zookeeper实现简易版服务的注册与发现机制,第1张

基于Zookeeper实现简易版服务的注册与发现机制 一、功能要求

基于Zookeeper实现简易版服务的注册与发现机制

  1. 启动2个服务端
    将服务端IP和端口信息注册到Zookeeper上

  2. 启动1个客户端
    从Zookeeper中获取2个服务端节点信息
    客户端与每一个服务端都建立连接

  3. 某个服务端下线后,Zookeeper注册列表会自动剔除下线的服务端节点,客户端与下线的服务端断开连接

  4. 服务端重新上线,客户端能感知到,并且与重新上线的服务端重新建立连接

  5. 基于Zookeeper的简易版负载均衡策略
    5.1 Zookeeper记录每个服务端的最后一次响应时间(客户端选择响应时间短的服务端进行通信)
    5.2 定时判断超过5s钟都没有被请求的客户端,如果超过就把对应的服务端的响应时间设置成0(保证负载均衡的正常切换,不要总是请求一个服务端)


二、zk客户端 功能实现中使用Curator,Curator是一款连接zk服务的框架,提供了比较全面的功能,因此选择此客户端进行zk的相关 *** 作




三、功能实现—上线和下线 3.1 代码实现-公共模块

3.2 代码实现-提供者模块

相关依赖


将服务端的信息注册到zk上

creatingParentContainersIfNeeded()接口非常有用,因为一般情况开发人员在创建一个子节点必须判断它的父节点是否存在,如果不存在直接创建会抛出NoNodeException,使用creatingParentContainersIfNeeded()之后Curator能够自动递归创建所有所需的父节点。

补充:zk节点创建

服务端业务代码实现


3.3 代码实现-消费者模块

相关依赖

监听zk上指定路径的节点变化

补充:监听api


监听具体实现

客户端建立连接

处理类

四、功能实现—负载 4.1 服务器端,在zk上存储请求的响应时间,默认0s

4.2 客户端
  • 开启定时任务,定时将耗时比较长的服务端的响应时间设置为0
  • 开启线程,选择客户端进行请求 *** 作

核心线程:按照响应时间进行排序(选择响应时间短的服务端进行交互)


刷新线程:保证负载均衡的正常执行(不要总是请求一个服务端)


封装连接信息

五、日志分析和具体代码实现

功能实现下载地址1上下线监听2zk均衡负载

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5072762.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-16
下一篇 2022-11-16

发表评论

登录后才能评论

评论列表(0条)

保存