• Spring cloud学习笔记(服务注册与发现框架Eureka)


    Eureka的工作机制

    Eureka Server:服务注册服务器,也称服务注册中心,各个服务启动后会在Eureka Server中进行注册,Eureka Server的服务注册表会储存所有的可用服务节点的信息。
    Eureka Client:服务实例Eureka Client内置有轮询负载均衡器,服务启动后Eureka Client将会向Eureka Server发送心跳服务。
    Eureka组件工作原理
    Eureka Client注册Eureka Server,Eureka Client中的服务是通过REST调用的。Eureka服务还具有缓存功能,它能够从Eureka Servler查询当前注册的服务信息并缓存本地。

    服务提供者和服务消费者

    服务提供者:Eureka Client启动之后服务提供者,会通过REST请求将自己注册在Eureka Server中,并维护一个心跳进行服务续约,防止Eureka Server讲服务从服务列表中剔除。
    服务消费者:用于获取Eureka Server注册的服务清单,并且该服务清单默认隔离30秒更新一次,服务消费者获取消费清单后,能够根据自己的需求决定调用那个服务,默认采用轮询方式调用,从而实现Eureka Client的负载均衡。
    服务提供者和服务消费者是可以相互转换的,一个服务既可能是服务消费者,也有可能是服务提供者。

    搭建Eureka Server

    (1)创建一个名称为Eureka的Spring Boot项目,添加Eureka Serve依赖。
    在pom.xml中添加

    
                org.springframework.cloud
                spring-cloud-starter-netflix-eureka-server
    
    
    • 1
    • 2
    • 3
    • 4

    (2)修改全局配置文件application.properties的后缀名为yml。向其添加Eureka的配置信息。

    server:
      port: 7000  #服务器端口号
    spring:
        application:
          name:eureka-server # 端口号名称配置
    eureka:
        client:
          fetch-registry: false #表示是否向EurekaServer注册
          register-with-eureka: false #表示是否从EurekaServer获取注册信息
          service-url:
            default-zone:
              http://${eureka.instance.hostname}:${server.port}/eureka/
        instance:
            hostname: localhost
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    (3)在启动类中天剑@EnableEurekaServer注解启动器。
    (4)启动服务,访问http://localhost:7000
    在这里插入图片描述

    搭建服务提供者

    (1)创建一个名车文eureka-provider的SpringBoot项目,添加Web、EurekaClient依赖。
    (2)将全局配置文件application.properties改为application.yml,添加配置信息

    server:
      port: 7006 # 指定该provider的端口号
    spring:
      application: #指定应用名称
        name: eureka-provider
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:7000/eureka/
      instance:
        hostname: localhost
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    (3)在启动类上添加@EnableEurekaServer,启动服务
    会出现
    在这里插入图片描述
    访问http://localhost:7000/
    在这里插入图片描述

    搭建服务消费者

    (1)创建一个名车文eureka-consumer的SpringBoot项目,添加Web、EurekaClient依赖。
    (2)将全局配置文件application.properties改为application.yml,添加配置信息

    server:
      port: 7002 #指定该Eureka的端口号
    spring:
      application:
        name: eureka-consumer #用于设置服务的名字
    eureka:
      instance:
        prefer-ip-address: true #用于设置是否显示主机的IP
      client:
        service-url:
          defaultZone: http://localhost:7000/eureka/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    (3)在启动类上添加@EnableEurekaClient注解,开启Eureka Client功能,启动服务
    访问http://localhost:7000/
    在这里插入图片描述

    搭建Eureka高可用集群

    (1)先修改C:\Windows\System32\drivers\etc下的hosts文件,增加以下代码

    127.0.0.1		server1
    127.0.0.1		server2
    
    • 1
    • 2

    (2)改造Eureka Server,先修改之前的Eureka Server的全局变量

    server:
      port: 7000  #服务器端口号
    spring:
      application:
        name: eureka-server # 端口号名称配置
    eureka:
      client:
        fetch-registry: false #表示是否向EurekaServer注册
        register-with-eureka: false #表示是否从EurekaServer获取注册信息
        service-url:
          defaultZone:
            http://server2:7009/eureka/
      instance:
        hostname: server1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    (3)创建一个新的Eureka Server搭建一个eureka-server-another,的Eureka Server,全局变量的值为:

    server:
        port: 7009  #服务器端口号
    spring:
        application:
            name: eureka-server2 # 端口号名称配置
    eureka:
        client:
            service-url:
                defaultZone:
                    http://server1:7000/eureka/
        instance:
            hostname: server2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    (4)创建一个新的服务器提供者的方式,搭建一个名为eureka-provider-another的服务提供者,全局变量的值为

    server:
      port: 7007 # 指定该provider的端口号
    spring:
      application: #指定应用名称
        name: eureka-provider
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:7000/eureka/
      instance:
        hostname: localhost
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    (5)改造服务消费者,更改全局变量

    server:
      port: 7002 #指定该Eureka的端口号
    spring:
      application:
        name: eureka-consumer #用于设置服务的名字
    eureka:
      instance:
        hostname: localhost
      client:
        service-url:
          defaultZone: http://server1:7000/eureka/,http://server2:7009/eureka/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    (6)启动Eureka高可用服务器,依次启动Eureka Server、两个服务提供者、一个服务消费者,访问http://localhost:7000/,http://localhost:7009/
    在这里插入图片描述

    在这里插入图片描述

    Eureka的常用配置

    心跳机制

    Eureka是通过信条的方式实现对各个服务实例的健康检测,心跳机制可以有效检查客户端进程是否正常运行。
    设置Eureka Client心跳默认时间代码如下:

    eureka:
    	instance:
    		lease-renewal-interval-in-seconds:5 #心跳默认为5秒
    
    • 1
    • 2
    • 3

    EurekaServer如果一定期限内没有接收到Eureka Client的实例心跳,就会从注册中心剔除掉,去他客户端也无法访问这个实例,这个期限默认为90秒
    具体代码如下:

    eureka:
    	instance:
    		lease-renewal-interval-in-seconds: 5
    	    lease-expiration-duration-in-seconds: 10 #设置每隔10秒刷新列表
    
    • 1
    • 2
    • 3
    • 4

    自我保护机制

    当Eureka注册中心出现故障时Eureka Client服务有可能无法正常续约,造成误杀的可能。自我保护机制就是为了防止误杀的情况。
    Eureka Server通过判断是否存在大量续约失败服务,从而确定是否进行自我保护,Eureka Server默认的自我保护阙值是0.85,如果Eureka Server心跳比例接收到的服务续约数低于阙值,就会采取自我保护,不再剔除注册列表的信息。
    默认情况下自我保护是开启的,关闭的代码如下:

    eureka:
    	server:
    		enable-self-preservation: false
    
    • 1
    • 2
    • 3

    其他配置

    服务注册相关的配置信息:

    参数名称参数说明
    enable启动Eureka客户端,默认值为true
    registryFetchIntervalSecond从Eureka服务器端获取注册信息的间隔时间,单位为妙,默认为30
    fetchRegistry是否从Eureka服务端获取注册信息,默认为false
    eurekaServerRead读取Eureka Server信息的超时时间,单位为秒,默认值为8
    initialInstanceInfoReolicationInstervalSeconds初始化实力信息到Eureka服务端的间隔时间,单位为秒,默认值40
    instanceInfoReolicationInstervalSeconds更新实例信息的变化Eureka服务端的间隔时间,单位为秒,默认值为30

    实例服务相关的配置信息

    参数名称参数说明
    preferIpAddress是否有限使用IP地址作为主机名的标识,默认值false
    leaseRenewalIntervalSecondsEureka客户端向服务端发送心跳的时间间隔,单位为秒。默认为30
    leaseExpirationDurationInSecondsEureka服务端在收到最后一次心跳之后等待的时间上限,单位为秒,默认为90
    appname服务名,默认取spring.application,name的配置值。
    hostname主机名。不配置时,需要将根据操作系统的主机名来获取。
  • 相关阅读:
    大数据必学Java基础(六十):集合补充
    【得到日期对象NSDate的各个部分 Objective-C语言】
    第一性原理谈安全性和可靠性
    十一、统一网关GateWay(搭建网关、过滤器、跨越解决)
    chrome账户密码管理
    Javaweb的AJAX及Axios框架使用(封装AJAX)
    简谈设计模式之建造者模式
    R语言的各种统计分布函数
    defer面试题,你能答对几题?
    【Leetcode60天带刷】day01——704.二分查找、27.移除元素
  • 原文地址:https://blog.csdn.net/qq_50834939/article/details/125880951