第3章 Eureka、Zookeeper、Consul服务注册中心

本文详细介绍了Eureka、Zookeeper和Consul这三种服务注册中心的原理与实践。Eureka采用CS架构,包括服务注册与发现、自我保护机制等。Zookeeper是一个分布式协调工具,可用于服务提供者和消费者的注册。Consul提供HTTP和DNS发现方式,支持多数据中心,具有健康检查和KV存储功能。
摘要由CSDN通过智能技术生成

3.1Eureka

3.1.1什么是Eureka

   什么是服务治理:Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务治理。在传统的rpc远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理,管理服务于服务之间依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册。

   什么是服务注册与发现:Eureka采用了CS的设计架构,Eureka Server 作为服务注册功能的服务器,它是服务注册中心。而系统中的其他微服务,使用 Eureka的客户端连接到 Eureka Server并维持心跳连接。这样系统的维护人员就可以通过 Eureka Server 来监控系统中各个微服务是否正常运行。

   在服务注册与发现中,有一个注册中心。当服务器启动的时候,会把当前自己服务器的信息,比如服务地址通讯地址等以别名方式注册到注册中心上。另一方(消费者|服务提供者),以该别名的方式去注册中心上获取到实际的服务通讯地址,然后再实现本地RPC调用RPC远程调用框架

   核心设计思想在于注册中心,因为使用注册中心管理每个服务与服务之间的一个依赖关系(服务治理概念)。在任何rpc远程框架中,都会有一个注册中心(存放服务地址相关信息(接口地址))

 

Eureka包含两个组件:Eureka Server和Eureka Client

Eureka Server提供服务注册服务

各个微服务节点通过配置启动后,会在EurekaServer中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观看到。

EurekaClient通过注册中心进行访问

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

3.1.2单机Eureka构建

第一步:生成EurekaServer端服务注册中心

   (1)新建eureka-server7001模块,写eureka-server7001的pom

 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>cloudtest</artifactId>
        <groupId>com.taotao.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>eureka-server7001</artifactId>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <!--eureka-server-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
        <dependency>
            <groupId>com.taotao.springcloud</groupId>
            <artifactId>api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
    </dependencies>
</project>

   (2)写yml、主启动

 

    (3)启动eureka-server7001、访问http://localhost:7001/

 第二步:将provider-payment8001注册进EurekaServer

(1)在provider-payment8001的pom中添加依赖

<!--eureka-clint-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

   (2)在yml中添加eureka的相关配置

    (3)在主启动类上添加注解

 (4)先启动eureka-server7001,再启动provider-payment8001,访问http://localhost:7001/

 

 第三步:将consumer-order80注册进EurekaServer

(1)在consumer-order80的pom中添加依赖

<!--eureka-clint-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

   (2)在yml中添加eureka的相关配置

    (3)在主启动类上添加注解

    (4)先启动eureka-server7001,再启动provider-payment8001,再启动consumer-order80,访问http://localhost:7001/

 

    访问http://localhost/consumer/payment/selectById/2

3.1.3集群Eureka构建——搭建三个节点的集群为例

第一步:建三个节点模块,

(1)新建eureka-server7001、eureka-server7002、eureka-server7003(参考3.1.2节)

(2)修改映射配置

 (3)分别写三个节点模块的yml,三个节点互相注册

 

 (4)启动三个节点,分别访问localhost:7001/、localhost:7002/、 localhost:7003/(或http://eureka7001.com:7001/)

 

 

第二步:构建provider-payment集群环境(以两个为例),发布到3个eureka节点

   (1)按照2.3.1节创建provider-payment8002模块

    (2)将两个provider-payment发布到eureka集群

    (3)修改两个provider-payment的controller

 第三步:将consumer-order发布到eureka集群

第四步:负载均衡

   (1)修改consumer-order中controller的PaymentSrv_URL

 

 (2)使用@LoadBalanced注解赋予RestTemplate负载均衡的能力

第五步:测试,

(1)依次启动eureka集群、provider集群、consumer

    (2)访问其中一个eureka节点

    (3)多次访问http://localhost/consumer/payment/selectById/2测试轮询

 

3.1.4actuator微服务信息完善

在yml文件中添加以下配置,修改服务名称,使访问信息有IP提示:

 

3.1.5Eureka自我保护

   某时刻某一个微服务不可用了,eureka不会立刻清理,依旧会对该服务的信息进行保存

3.2Zookeeper

   Zookeeper是一个分布式协调工具,可以实现注册中心功能

3.2.1服务提供者

第一步:新建provider-payment8003模块

   (1)zookeeper的依赖

<!--zookeeper-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>

   (2)yml

    (3)主启动类

    (4)controller

第二步:启动zokeeper

第三步:测试

   (1)启动provider-payment8003,在zookeeper中查看是否注册成功

 

    (2)访问http://localhost:8003/payment/zk

    (3)在zookeeper中查看当前访问的编码,查看该编码,得到json,解析该json

 

 

3.2.2服务消费者

第一步:新建consumerzk-order80

   (1)pom、yml、主启动类

<!--zookeeper-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>

 

    (2)config

    (3)controller

 

第二步:测试

   (1)启动consumerzk-order80

   (2)在zookeeper中查看

    (3)访问http://localhost/consumer/payment/zk

3.3Consul

3.3.1Consul简介

   提供HTTP和DNS两种发现方式;支持多种健康监控;KV存储;支持多数据中心;可视化web界面

   下载地址:https://www.consul.io/downloads.html

   使用手册:https://www.springcloud.cc/spring-cloud-consul.html

3.3.2安装并运行Consul

   下载解压之后只有一个exe文件,可以进入到cmd查看consul的版本

    使用consul agent -dev启动consul

    启动成功之后访问localhost:8500/进入到可视化界面

3.3.3服务提供者

第一步:新建provider-payment8004

<!--consul-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>

 

 

 

 第二步:测试

 

3.3.4服务消费者

第一步:新建consumerconsul-order80

<!--consul-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>

 

 

 

 第二步:测试

 

3.4对比三个注册中心

   CAP理论:C——Consistency(强一致性);A——Availability(可用性);P——Partition tolerance(分区容错性)

   Eureka:AP

   Zookeeper、Consul:CP

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桃桃tao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值