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

Eureka服务注册与发现

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

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. 启动类:
    启动类
  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. 启动测试访问:
    在这里插入图片描述
    当出现上图所示的界面,代表一个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. 启动测试:
    在这里插入图片描述
            若不想将服务注册到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)
在这里插入图片描述
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
    在这里插入图片描述

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

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

访问测试首页:
在这里插入图片描述


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

eureka.server.enable-self-preservation = false

参数详解:
在这里插入图片描述
在这里插入图片描述在这里插入图片描述


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值