注册中心

  • 场景分析

场景分析

  1. 在分布式服务体系结构比较简单的场景下,我们的服务可能是这样的
    2.现在 Order-Service 需要调用外部服务的 User-Service ,对于外部的服务依赖,我们直接配置在我们的服务配置文件中,在服务调用关系比较简单的场景,是完全OK的。随着服务的扩张,User-Service 可能需要进行集群部署,如下:
    如果系统的调用不是很复杂,可以通过配置管理,然后实现一个简单的客户端负载均衡也是OK的,但是随着业务的发展,服务模块进行更加细粒度的划分,业务也变得更加复杂,再使用简单的配置文件管理,将变得难以维护。当然我们可以再前面加一个服务代理,比如nginx做反向代理, 如下

如果我们是如下场景呢?

这个时候我们可以借助于Zookeeper的基本特性来实现一个注册中心,什么是注册中心,顾名思义,就是让众多的服务,都在Zookeeper中进行注册,啥是注册,注册就是把自己的一些服务信息,比如IP,端口,还有一些更加具体的服务信息,都写到 Zookeeper节点上, 这样有需要的服务就可以直接从zookeeper上面去拿,怎么拿呢? 这时我们可以定义统一的名称,比如,User-Service, 那所有的用户服务在启动的时候,都在User-Service 这个节点下面创建一个子节点(临时节点),这个子节点保持唯一就好,代表了每个服务实例的唯一标识,有依赖用户服务的比如Order-Service 就可以通过User-Service 这个父节点,就能获取所有的User-Service 子节点,并且获取所有的子节点信息(IP,端口等信息),拿到子节点的数据后Order-Service可以对其进行缓存,然后实现一个客户端的负载均衡,同时还可以对这个User-Service 目录进行监听, 这样有新的节点加入,或者退出,Order-Service都能收到通知,这样Order-Service重新获取所有子节点,且进行数据更新。这个用户服务的子节点的类型为临时节点。 第一节课有讲过,Zookeeper中临时节点生命周期是和SESSION绑定的,如果SESSION超时了,对应的节点会被删除,被删除时,Zookeeper 会通知对该节点父节点进行监听的客户端, 这样对应的客户端又可以刷新本地缓存了。当有新服务加入时,同样也会通知对应的客户端,刷新本地缓存,要达到这个目标需要客户端重复的注册对父节点的监听。这样就实现了服务的自动注册和自动退出。
项目构建
从spring cloud官网创建user-center项目

同样的方式创建一个product-cneter

解压项目用idea打开,用maven导入项目

同样的方式引入product-center 项目

配置zookeeper
user-center 服务:
application.properties

spring.application.name=user-center
#zookeeper 连接地址 ,
#如果使用了 spring cloud zookeeper config这个配置应该配置在 bootstrap.yml/bootstrap.properties中
spring.cloud.zookeeper.connect-string=192.168.109.200:2181
#将本服务注册到zookeeper,如果不希望自己被发现可以配置为false, 默认为 true
spring.cloud.zookeeper.discovery.register=true

代码编写:
配置 Resttemplate 支持负载均衡方式

下面展示一些 内联代码片

@SpringBootApplication
public class UserCenterApplication {public static void main(String[] args) {SpringApplication.run(UserCenterApplication.class, args);}@Bean@LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}
}

编写测试类:
TestController, Spring Cloud 支持 Feign, Spring RestTemplate,WebClient 以 逻辑名称,替代具体url的形式访问。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;@RestController
public class TestController {@Autowiredprivate RestTemplate restTemplate;@GetMapping("/test")public String test(){return this.restTemplate.getForObject( "http://product-center/getInfo" ,String.class);}
}

product-center 服务:
application.properties

spring.application.name=user-center
#zookeeper 连接地址
spring.cloud.zookeeper.connect-string=192.168.109.200:2181
#将本服务注册到zookeeper
spring.cloud.zookeeper.discovery.register=true

主类,接收一个getInfo 请求

@SpringBootApplication
@RestController
public class ProductCenterApplication {@Value("${server.port}")private String port;@Value( "${spring.application.name}" )private String name;@GetMapping("/getInfo")public String getServerPortAndName(){return  this.name +" : "+ this.port;}public static void main(String[] args) {SpringApplication.run(ProductCenterApplication.class, args);}}

启动两个product-center 实例
通过idea 配置,启动多个实例,用端口区分不同的应用


启动一个user-center 实例,默认8080端口

启动服务 :访问 http://localhost:8080/test


已经实现了,服务端的自动发现和客户端负载均衡。

停掉product-center: 10002,再次访问

一定的超时时间过去之后,product-center: 10002 会从zookeeper中剔除,zookeeper会通知客户端,进行本地缓存刷新,再次访问, 已经实现了失效节点的自动退出。

Zookeeper实现注册中心相关推荐

  1. Zookeeper 服务注册中心

    Zookeeper 服务注册中心 Zookeeper 官网 ZooKeeper:分布式应用程序的分布式协调服务 ZooKeeper 是分布式应用程序的分布式开源协调服务.它公开了一组简单的原语,分布式 ...

  2. springboot整合dubbo\zookeeper做注册中心

    springboot整合dubbo发布服务,zookeeper做注册中心.前期的安装zookeeper以及启动zookeeper集群就不说了. dubbo-admin-2.5.4.war:dubbo服 ...

  3. 记录 - Dubbo使用Zookeeper为注册中心添加认证口令时,连接失败的故障

    记录 - Dubbo使用Zookeeper为注册中心添加认证口令时,连接失败的故障 故障现象 配置信息 Dubbo服务配置 报错信息 初始化信息 报错的重点信息 报错信息跟踪 解决思路 设置超时时间后 ...

  4. Zookeeper用作注册中心的原理

    一.RPC框架中有3个重要的角色: 注册中心:保存所有服务的名字,服务提供者的IP列表,服务消费者的IP列表 服务提供者:提供跨进程服务 服务消费者:寻找到指定命名的服务并消费. 二.什么是ZooKe ...

  5. 简述Zookeeper作注册中心

    2019独角兽企业重金招聘Python工程师标准>>> Zookeeper的数据模型很简单,有一系列被称为ZNode的数据节点组成,与传统的磁盘文件系统不同的是,zk将全量数据存储在 ...

  6. Dubbo入门之hello world(zookeeper做注册中心)

    说明:注册中心可以用多种,项目中一般都用zookeeper 注册中心方式 demo1用的multicast广播注册中心方式 会了multicast广播注册中心方式,zookeeper就很简单了 dem ...

  7. dubbo简易实现_分别利用自定义的注册中心和zookeeper

    2019独角兽企业重金招聘Python工程师标准>>> dubbo + (点对点型.zookeeper)整合,理解其思想,熟悉其基本流程 2017-06-25 (github地址:h ...

  8. Dubbo 集成 ZooKeeper 注册中心实现服务调用

    Dubbo 是基于Java的开源的RPC的分布式服务框架,目前是 Apache 项目. 推荐使用 ZooKeeper 做注册中心,当然也可以支持 Redis, Multicast 和Simple. D ...

  9. 一文搞懂注册中心 zookeeper 和 eureka 中的CP和 AP

    作者:胖大星 cnblogs.com/wei57960/p/12260228.html 前言 在分布式架构中往往伴随CAP的理论.因为分布式的架构,不再使用传统的单机架构,多机为了提供可靠服务所以需要 ...

  10. 微服务 注册中心的作用_微服务架构Dubbo之注册中心(Zookeeper)

    注册中心简介 在微服务架构中,注册中心是核心的基础服务之一.在微服务架构流行之前,注册中心就已经开始出现在分布式架构的系统中.Dubbo是一个在国内比较流行的分布式框架,被大量的中小型互联网公司所采用 ...

最新文章

  1. 汇总 | 深度学习中图像语义分割基准数据集详解
  2. poj3159(差分约束)
  3. conda 删除环境_conda建立、删除、退出环境
  4. Maven安装和配置环境变量
  5. html5应用测试方法,详解html5的video标签测试应用
  6. 手机下载Python_将安卓手机打造成 Python 全栈开发利器
  7. java顺序表增删查改_Java实现顺序表的增删改查
  8. 职场上个人的核心技术_职场上,靠谱比聪明更重要:如何做一个靠谱的人
  9. form和ajax同时提交吗,form表单提交与ajax消息传递
  10. 配置中心.php,FastD 最佳实践二: 构建配置中心
  11. Tomcat下work文件夹的作用
  12. RG-IS2700G工业交换机ERPS技术解析
  13. 编写一个能将给定非负整数列表中的数字排列成最大数字的函数。例如,给定[50,2,1,9],最大数字为95021。
  14. revit二次开发 IdlingExternalEvent 空闲事件与外部事件
  15. C/C++使用strcpy函数报错:“XXX处有未经处理的异常:0xC0000005:写入位置0x00000000时发生访问冲突”
  16. 虚数和复数更好的理解
  17. bochs linux 安装软件,bochs linux镜像
  18. 20、生鲜电商平台-优惠券设计与架构
  19. Android Wifi小记 (2)
  20. 计算机作品三等奖——飞翔吧,七彩的梦

热门文章

  1. 2014,念念不忘 必有回响
  2. 2022华为机试社招OD高频考试真题【9, 10月份Q2, Q3考试新编程题目】
  3. 员工计算机耗材管理,八大秘籍教你精细化管理科室耗材!
  4. 《生命》第五集:Birds (鸟类)
  5. 为什么要写书?出版图书有哪些好处?
  6. postgresql12的同步流复制搭建及主库hang问题处理和分析
  7. 网络原理考点之无线网络应用层协议
  8. linux c 拒绝服务攻击,低速率拒绝服务攻击原理
  9. Unable to start embedded Tomcat
  10. Redis(五)深入了解Redis核心设计原理 SDS类型(String)redis如何扩容 五种结构底层数据结构 结构变换条件 如何配置条件 GEO使用 ACL