欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SpringCloud系列-Eureka服务注册与发现

程序员文章站 2022-06-13 15:33:05
...

Eureka服务注册与发现

        Eureka是netfix开源的服务发现组件,本身是一个基于Rest的服务。它包含Server和Client两部分。SpringCloud将它集成子项目Spring Cloud Netfix中,从而实现微服务的注册与发现。

SpringCloud系列-Eureka服务注册与发现

  • Application service – 服务提供者
  • Application client – 服务消费者
  • Make Remote Call – 调用Restful API的行为
  • us-east-1c、us-east-1d 等都属于us-east-1这个region
  • Eureka Server 提供服务发现的能力,各个微服务启动时,会像Eureka Server注册自己的信息(例如IP、端口、微服务名称等),Eureka Server会存储这些信息。
  • Eureka Client是一个java客户端,用于简化与Eureka Server的交互
  • 微服务启动后,会周期行(默认30s)的向Eureka Server 发送自己的心跳以续约自己的“租期”
  • 如果Eureka Server在一定的时间内没有接收到某个微服务示例的心跳,Eureka server将会注销该实例(默认90s)
  • 默认情况下,Eureka server同时也是Eureka Client。多个Eureka Server实例互相通过复制的方式来实现服务注册表中的数据同步。
  • Eureka Client 会缓存服务注册表中的信息。(如果Eureka Server所有节点都宕掉,服务消费者依然可以使用缓存中的信息找到服务提供者并完成调用)

编写Eureka Server:
注:本文通过IDEA基于Springboot的基础创建微服务项目。

  1. pom.xml:
<!-- 创建一个SpringBoot项目,在pom.xml中加入以下jar包 -->
 <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
 </dependency>
  1. 启动类:
    SpringCloud系列-Eureka服务注册与发现
  2. 配置文件:
server:
  port: 8081
eureka:
  client:
    #表示是否将自己注册到eureka server,默认为true,由于当前应用就是eureka server,故而设为false
    registerWithEureka: false
    #表示是否从eureka server获取注册的信息,默认为true.
    #        因为这是一个单点的eureka server,不需要同步其他的eureka server节点的数据,故而设为false
    fetchRegistr: false
    #设置与Eureka server交互的地址,查询服务和注册服务都需要
    #      依赖这个地址。默认是http:localhost:8086/eureka;多个地址见可使用,分割
    serviceUrl:
      defaultZone: http://localhost:8081/eureka
  1. 启动测试访问:
    SpringCloud系列-Eureka服务注册与发现
    当出现上图所示的界面,代表一个Eureka Server就创建好了。该页面展示了很多信息。例如当前示例的系统状态、注册到Eureka Server上的示例服务、常用信息、示例信息的等。

将微服务注册到Eureka server上:
新建三个SpringBoot项目
5. pom.xml:

<!-- 三个项目统一添加-->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  1. 配置文件:
server:
  port: 8080
spring:
  application:
    name: test01 #指定注册到Eureka server上的应用名称

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8081/eureka/
  instance:
    prefer-ip-address: true #表示将自己的IP注册到Eureka server
  1. 启动测试:
    SpringCloud系列-Eureka服务注册与发现
            若不想将服务注册到Eureka server,只需要设置spring.cloud.service-registry.auto-registration.enable=false或者在启动类添加注解#EnableDiscoveryClient(auto-Register = false).

搭建Eureka Server集群:

操作步骤:
1. 复制第一个项目 eureka-server新生成另一个新项目。
2. 修改hosts文件。(windows:C:\Windows\System32\dirvers\etc\hosts; Linux/macos: /etc/hosts)
SpringCloud系列-Eureka服务注册与发现
3. 修改配置文件

spring:
  application:
    name: eureka-server
eureka:
  instance:
    #要求Client通过ip的方式进行注册
    prefer-ip-address: false
    lease-expiration-duration-in-seconds: 30 #续约到期时间(默认90秒)
    lease-renewal-interval-in-seconds: 10 #续约更新时间间隔(默认30秒),使得eureka及时剔除无效服务

  client:
    register-with-eureka: false
    fetch-registry: false

  server:
    enable-self-preservation: false #关闭自我保护模式(缺省为打开)
    eviction-interval-timer-in-ms: 10000 #续期时间,清理无效服务的时间间隔,默认是60*1000

---
spring:
  # 指定profile=peer1
  profiles: peer1
eureka:
  instance:
    # 指定当properfile=peer1时,主机名是peer1
    hostname: peer1
  client:
    serviceUrl:
      defaultZone: http://peer2:8079/eureka/,http://peer3:8077/eureka
server:
  port: 8078

---
spring:
  profiles: peer2
eureka:
  instance:
    hostname: peer2
  client:
    serviceUrl:
      defaultZone: http://peer1:8083/eureka,http://peer3:8077/eureka
server:
  port: 8079

---
spring:
  profiles: peer3
eureka:
  instance:
    hostname: peer3
  client:
    serviceUrl:
      defaultZone: http://peer1:8083/eureka,http://peer2:8079/eureka
server:
  port: 8077

  1. 将项目打成jar包,使用命令行启动。
    java -jar xxxx --spring.profiles.active=peer1
    java -jar xxxx --spring.profiles.active=peer2
    java -jar xxxx --spring.profiles.active=peer3
    SpringCloud系列-Eureka服务注册与发现

注册服务到Eureka server集群上:
修改上面新建的test01、test02、test03三个项目的配置文件,将其注册到集群中:

eureka:
  client:
    serviceUrl:
      defaultZone: http://peer2:8079/eureka/

访问测试首页:
SpringCloud系列-Eureka服务注册与发现


Eureka的自我保护模式:
访问eureka首页会出现以下警告:
SpringCloud系列-Eureka服务注册与发现
        默认情况下,如果Eureka Server在一定时间内没有监听到某个微服务实例的心跳,EurekaServer将注销该实例(默认90s)。但是当网路出现故障,微服务与Eureka Server之间是无法正常通行的,但是此时微服务是正常可用的,Eureka server本身不应该剔除这个微服务。
        Eureka通过“自我保护模式”来解决这个问题-----当Eureka server节点在短时间内丢失过多客户端时,那么这个节点就会进入自我保护模式。一旦进入这个模式,Eureka server就会保护服务注册表中的信息,不在剔除服务注册表中的数据。当网络恢复之后,改Eureka Server节点会自动退出自我保护模式。
禁用方式为:

eureka.server.enable-self-preservation = false

参数详解:
SpringCloud系列-Eureka服务注册与发现
SpringCloud系列-Eureka服务注册与发现SpringCloud系列-Eureka服务注册与发现


结束语:
        文章到这里就结束了,本篇文章中所有的项目都是基于Springboot的项目搭建,所以学习SpringCloud还是需要一定的SpringBoot的基础的。
        如果您在阅读的过程中有错误的地方还请多多指正,小编及时进行修正,谢谢!

相关标签: SpringCloud学习集