SpringCloud-服务注册中心(Eureka、Consul、Zookeeper、快速上手)

SpringCloud服务注册中心

Eureka

Eureka是一种服务治理的实现,在传统的rpc远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,所以需要使用服务治理,管理服务之间的依赖关系,可以实现服务调用、负载均衡、容错等

Eureka包含组件

Eureka Server提供服务注册服务

各个微服务节点通过配置启动后,会在Eureka Server中进行注册,这样Eureka Server中的服务注册表中会保存着所以可用的服务节点信息,节点信息可用在Eureka管理界面中看到

Eureka Client通过注册中心访问

是一个java客户端,用于简化Eureka Server的交互,客户端同时也具备一个内置的、轮询的负载均衡算法,在应用启动后,会定期向Eureka Server发送心跳(默认30秒),如果Eureka Server在多个心跳周期没有收到该节点的心跳,Eureka Server会将从服务注册表中把这个服务节点移除(默认90秒)

单机Eureka构建

依赖引入

<dependency>
    <groupId>org.springframework.cloudgroupId>
    <artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
dependency>

yml编写

SpringCloud-服务注册中心(Eureka、Consul、Zookeeper、快速上手)_第1张图片

启动类编写

注意启动类中需要加上@EnableEurekaServer注解表示该类是Eureka Server

SpringCloud-服务注册中心(Eureka、Consul、Zookeeper、快速上手)_第2张图片

测试

通过访问7001能够成功访问表示Eureka Server部署成功

SpringCloud-服务注册中心(Eureka、Consul、Zookeeper、快速上手)_第3张图片

提供者注册到Eureka

依赖引入

<dependency>
    <groupId>org.springframework.cloudgroupId>
    <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>

yml编写

SpringCloud-服务注册中心(Eureka、Consul、Zookeeper、快速上手)_第4张图片

修改启动类

在启动类上增加@EnableEurekaClient的注解

SpringCloud-服务注册中心(Eureka、Consul、Zookeeper、快速上手)_第5张图片

测试

可在Eureka中看到已注册上的服务

SpringCloud-服务注册中心(Eureka、Consul、Zookeeper、快速上手)_第6张图片

消费者注册到Eureka

依赖引入

<dependency>
    <groupId>org.springframework.cloudgroupId>
    <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>

yml编写

SpringCloud-服务注册中心(Eureka、Consul、Zookeeper、快速上手)_第7张图片

修改启动类

在启动类上增加@EnableEurekaClient的注解

SpringCloud-服务注册中心(Eureka、Consul、Zookeeper、快速上手)_第8张图片

测试

可在Eureka中看到已注册上的服务

SpringCloud-服务注册中心(Eureka、Consul、Zookeeper、快速上手)_第9张图片

集群Eureka构建

修改Host文件

在这里插入图片描述

修改yml

在注册时需要多个eureka相互注册

SpringCloud-服务注册中心(Eureka、Consul、Zookeeper、快速上手)_第10张图片

测试

若看到2给eureka相互指向,那么表示该eureka配置成功

SpringCloud-服务注册中心(Eureka、Consul、Zookeeper、快速上手)_第11张图片

服务注册到Eureka

服务注册需要向集群的Eureka注册,那么需要将所以的Eureka地址都写上

SpringCloud-服务注册中心(Eureka、Consul、Zookeeper、快速上手)_第12张图片

actuator微服务信息完善

在前面使用Eureka中可以发现,注册上去的服务存在一些问题,如服务名称比较乱,以及注册的服务不知道是什么IP地址,如果在大量的服务注册时这个问题会导致排查移除时很难处理

SpringCloud-服务注册中心(Eureka、Consul、Zookeeper、快速上手)_第13张图片

可通过修改yml来解决这个问题

SpringCloud-服务注册中心(Eureka、Consul、Zookeeper、快速上手)_第14张图片

修改后可以发现在Eureka可以看到服务的IP以及标准的服务名称,方便以后问题排查

SpringCloud-服务注册中心(Eureka、Consul、Zookeeper、快速上手)_第15张图片

服务发现Discovery

Discovery可以获取到Eureka上的注册的服务实例完成信息,这个后期是非常用于的东西

修改启动类

SpringCloud-服务注册中心(Eureka、Consul、Zookeeper、快速上手)_第16张图片

编写测试

通过discoveryClient可以从Eureka获取实例列表,以及根据主机名获取该名称下的所有实例的信息详细,包括ip、端口、serviceid、uri等

SpringCloud-服务注册中心(Eureka、Consul、Zookeeper、快速上手)_第17张图片

在这里插入图片描述

Eureka自我保护机制

概述

当Eureka中看到这段红色话表示Eureka发送了自我保护机制,当触发了这种机制那么Eureka将不会剔除任何一个已经下线了的服务,属于CAP理论中的AP分支

在这里插入图片描述

自我保护思想

在默认情况下,如果Eureka Server在一定时间内没有收到某个微服务的实例心跳,Eureka Server就会将该实例从实例列表中剔除(默认90秒),但是当网络分区故障发送(延时、卡顿、拥挤)的时Eureka Server会发现大片服务没有心跳,这时如果大片剔除这些服务很危险,所以Eureka Server就会启动自我保护机制,认为这些服务都是存活的不会将任何一个服务剔除

禁止自我保护

#eureka注册中心配置
eureka:
  server:
    #关闭自我保护机制
    enable-self-preservation: false
    #剔除检查间隔时间调整2000毫秒
    eviction-interval-timer-in-ms: 2000
    
#eureka客户端配置
eureka:
  instance:
    #Eureka客户端发送心跳的时间间隔(默认30s)
    lease-renewal-interval-in-seconds: 1
    #Eureka服务端收到最后一个心跳时间,超时将剔除服务(默认90s)
    lease-expiration-duration-in-seconds: 2

Zookeeper

Zookeeper做为SpringCloud的注册中心目的是为了让一些交旧的dubbo项目以最少的成本从RPC转微服务,也可以减少转微服务的学习成本,在使用Zookeeper作为注册中心那么需要一些预备知识,Zookeeper安装与部署

预备知识:Zookeeper-快速入门(服务安装、单机部署、集群部署)

提供者注册到ZK

依赖引入

<dependency>
    <groupId>org.springframework.cloudgroupId>
    <artifactId>spring-cloud-starter-zookeeper-discoveryartifactId>
    
    
    <exclusions>
        <exclusion>
            <groupId>org.apache.zookeepergroupId>
            <artifactId>zookeeperartifactId>
        exclusion>
    exclusions>
dependency>

<dependency>
    <groupId>org.apache.zookeepergroupId>
    <artifactId>zookeeperartifactId>
    <version>3.4.9version>
    <exclusions>
        <exclusion>
            <groupId>org.slf4jgroupId>
            <artifactId>slf4j-apiartifactId>
        exclusion>
        <exclusion>
            <groupId>org.slf4jgroupId>
            <artifactId>slf4j-log4j12artifactId>
        exclusion>
        <exclusion>
            <groupId>log4jgroupId>
            <artifactId>log4jartifactId>
        exclusion>
    exclusions>
dependency>

编写yml

SpringCloud-服务注册中心(Eureka、Consul、Zookeeper、快速上手)_第18张图片

启动类编写

SpringCloud-服务注册中心(Eureka、Consul、Zookeeper、快速上手)_第19张图片

测试

可看到服务名称没正常的注册到服务Zookeeper中表示成功

SpringCloud-服务注册中心(Eureka、Consul、Zookeeper、快速上手)_第20张图片

消费者注册到ZK

依赖引入

<dependency>
    <groupId>org.springframework.cloudgroupId>
    <artifactId>spring-cloud-starter-zookeeper-discoveryartifactId>
    
    
    <exclusions>
        <exclusion>
            <groupId>org.apache.zookeepergroupId>
            <artifactId>zookeeperartifactId>
        exclusion>
    exclusions>
dependency>

<dependency>
    <groupId>org.apache.zookeepergroupId>
    <artifactId>zookeeperartifactId>
    <version>3.4.9version>
    <exclusions>
        <exclusion>
            <groupId>org.slf4jgroupId>
            <artifactId>slf4j-apiartifactId>
        exclusion>
        <exclusion>
            <groupId>org.slf4jgroupId>
            <artifactId>slf4j-log4j12artifactId>
        exclusion>
        <exclusion>
            <groupId>log4jgroupId>
            <artifactId>log4jartifactId>
        exclusion>
    exclusions>
dependency>

编写yml

SpringCloud-服务注册中心(Eureka、Consul、Zookeeper、快速上手)_第21张图片

启动类编写

SpringCloud-服务注册中心(Eureka、Consul、Zookeeper、快速上手)_第22张图片

controller编写

controller也是使用restTemple进行发送请求,这里服务名称与Eureka不同,Zookeeper是小写的

SpringCloud-服务注册中心(Eureka、Consul、Zookeeper、快速上手)_第23张图片

测试

能够成功调用8004服务

SpringCloud-服务注册中心(Eureka、Consul、Zookeeper、快速上手)_第24张图片

获取实例列表信息也没有问题

SpringCloud-服务注册中心(Eureka、Consul、Zookeeper、快速上手)_第25张图片

服务节点信息查看

在Zookeeper中若有服务注册上来都会被放在/services/服务名称/UUID(每个服务生成唯一的ID)路径中,通过get方式可以可以获取到某一个节点详细信息

SpringCloud-服务注册中心(Eureka、Consul、Zookeeper、快速上手)_第26张图片

SpringCloud-服务注册中心(Eureka、Consul、Zookeeper、快速上手)_第27张图片

Consul

Consul是一套分布式服务发现和配置管理系统,由HashiGorp公司用GO语言开发

提供了微服务系统中的服务治理、配置中心、控制总线等功能,这些功能中每一个都可以单独根据需要使用,也可以使用构建全方位的服务网格

提供者注册到Consul

依赖引入

<dependency>
    <groupId>org.springframework.cloudgroupId>
    <artifactId>spring-cloud-starter-consul-discoveryartifactId>
dependency>

编写yml

SpringCloud-服务注册中心(Eureka、Consul、Zookeeper、快速上手)_第28张图片

启动类编写

SpringCloud-服务注册中心(Eureka、Consul、Zookeeper、快速上手)_第29张图片

测试

可Consul服务端看到已注册上来的服务名称表示成功

SpringCloud-服务注册中心(Eureka、Consul、Zookeeper、快速上手)_第30张图片

消费者注册到Consul

依赖引入

<dependency>
    <groupId>org.springframework.cloudgroupId>
    <artifactId>spring-cloud-starter-consul-discoveryartifactId>
dependency>

编写yml

SpringCloud-服务注册中心(Eureka、Consul、Zookeeper、快速上手)_第31张图片

启动类编写

SpringCloud-服务注册中心(Eureka、Consul、Zookeeper、快速上手)_第32张图片

controller编写

controller也是使用restTemple进行发送请求

SpringCloud-服务注册中心(Eureka、Consul、Zookeeper、快速上手)_第33张图片

测试

可Consul服务端看到已注册上来的服务名称表示成功

SpringCloud-服务注册中心(Eureka、Consul、Zookeeper、快速上手)_第34张图片

测试远程调用

SpringCloud-服务注册中心(Eureka、Consul、Zookeeper、快速上手)_第35张图片

SpringCloud-服务注册中心(Eureka、Consul、Zookeeper、快速上手)_第36张图片

三款注册中心对比

组件名 语言 CAP 服务健康检查 对外暴露接口 Spring Cloud集成
Eureka Java AP 可配支持 HTTP 已集成
Consul Go CP 支持 HTTP/DNS 已集成
Zookeeper Java CP 支持 客户端 已集成

你可能感兴趣的:(SpringCloud,spring,cloud,spring,boot,eureka,consul,zookeeper)