专注于 JetBrains IDEA 全家桶,永久激活,教程
提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,等工具的永久激活

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

Eureka服务注册与发现

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

58_1.png

  • 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、 启动类: 58_2.png
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、 启动测试访问: 58_3.png当出现上图所示的界面,代表一个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、 启动测试: 58_4.png若不想将服务注册到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)

58_5.png3. 修改配置文件

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 58_6.png


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

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

访问测试首页:

58_7.png


Eureka的自我保护模式: 访问eureka首页会出现以下警告:

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

eureka.server.enable-self-preservation = false


参数详解:

58_9.png58_10.png58_11.png


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

文章永久链接:https://tech.souyunku.com/27776

未经允许不得转载:搜云库技术团队 » SpringCloud系列-Eureka服务注册与发现

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们