一、功能要求

基于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 上下线监听
2 zk均衡负载

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

  1. 基于Zookeeper实现简易的负载均衡

    基于Zookeeper实现简易的负载均衡 完整代码在这里基于Zookeeper实现简易的负载均衡 以下是讲解 一. 要求 1. 编程题一: 在基于Netty的自定义RPC的案例基础上,进行改造.基于Z ...

  2. Dubbo服务的注册与发现

    Dubbo服务的注册与发现 前言 最近参与的项目是一个基于Dubbo的项目,在开发过程中有些同事对于Dubbo服务的注册与发现机制,似乎不太了解.所以我抽空和他简单聊了聊我对Dubbo机制的了解. 正 ...

  3. .NET Core微服务之路:基于Consul最少集群实现服务的注册与发现(一)

    原文:.NET Core微服务之路:基于Consul最少集群实现服务的注册与发现(一) Consul介绍 Consul是HashiCorp公司推出的开源工具[开源地址:https://github.c ...

  4. 基于Python pygame简易版斗兽棋小游戏源代码

    基于Python pygame简易版斗兽棋小游戏源代码 游戏规则如下: 胜利条件: 1.吃掉对方全部棋子 2.走入对方兽穴(不可进入自己洞穴) 吃法: 1.象>狮>虎>豹>狼& ...

  5. 源码分析Dubbo服务注册与发现机制RegistryDirectory)

    RegistryDirectory,基于注册中心的服务发现,本文将重点探讨Dubbo是如何实现服务的自动注册与发现.从上篇文章,得知在消息消费者在创建服务调用器(Invoker)[消费者在初始时]时需 ...

  6. Chapter 1 快速搭建-服务的注册与发现(Eureka)

    Chapter 1 快速搭建-服务的注册与发现(Eureka) 一.Spring Cloud简介 为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代 ...

  7. 史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka)

    最新Finchley版本请访问: https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f1-eureka/ 或者 http://blog.csd ...

  8. SpringCloud 教程 | 第一篇: 服务的注册与发现Eureka

    SpringCloud 教程 | 第一篇: 服务的注册与发现Eureka(Finchley版本) 原文首发于:https://www.fangzhipeng.com/springcloud/2018/ ...

  9. java B2B2C springmvc mybatis电子商务平台源码-服务的注册与发现(Eureka)

    1.介绍 对于微服务的治理而言,其核心就是服务的注册和发现.在SpringCloud 中提供了多种服务注册与发现组件:Eureka,Consul,Zookeeper.官方推荐使用Eureka. 需要J ...

最新文章

  1. 溢出内容菜单_停止过度使用溢出菜单
  2. SAP 零售商品listing不成功,补充listing的方法
  3. 青龙羊毛——飞鸽花转省毛毛(搬运)
  4. Python基础教程:线程操作(oncurrent模块)详解
  5. 全国信息学奥林匹克联赛 ( NOIP2014) 复赛 模拟题 Day1 长乐一中
  6. 瞒不住了,难怪.NET进大厂这么难!
  7. vue使用echarts图表
  8. 微软为 Windows Terminal 推出全新 logo
  9. VisualStudio开发工具中的C#主流控件属性及事件汇总(菜鸟必备)
  10. Matlab基础(5)——符号运算
  11. matlab单回路和串级控制回路,单回路和串级控制系统仿真研究
  12. 【食品加工技术】第四章 饮料生产技术 笔记
  13. Spring In Action 第四版:中文、英文、源码
  14. 华为云服务器安装redis、mysql、jdk、tomcat、nginx
  15. 微信小程序:用户头像的更改与保存
  16. ESP8266_设置AP模式,WiFi名称密码
  17. 电源设计中的电容应用实例
  18. SM4加密算法原理和简单实现(java)
  19. 计算机课师生互动过多,课堂师生互动存在问题及途径分析
  20. linux配置编译指定库,Linux——dropbear编译安装

热门文章

  1. Angular 的概念模型
  2. dom4j解析xml的简单实用
  3. (六)企业部分之jdk
  4. Java基础—集合2Set接口和Map接口
  5. Android fillViewPort属性用法
  6. PowerShell 扩展工具第四波!
  7. CCNA网络小菜鸟笔记之(第十一章, 广域网协议)
  8. windows系统上安装mysql操作过程及常见错误处理
  9. ELK采集之nginx 日志高德地图出城市IP分布图
  10. epson me 1+只有主机能打印不能共享网络打印问题的处理