springcloud Eureka 学习记录

104 阅读3分钟

学习自# Spring Cloud Eureka详解

介绍

  • 是使用Netflix Eureka来实现服务注册与发现
  • 既包括服务端组件,也包含了客户端组件,并且服务端与客户端均采用java编写,
  • 保证ap(高可用、分区容错性)
  • 因此不能保证一致性,在给定的时间点每个实例关于所有服务的状态可能存在不一致的现象。

服务端:

Eureka服务端,即服务注册中心。它同其他服务注册中心一样,支持高可用配置。依托于强一致性提供良好的服务实例可用性,可以应对多种不同的故障场景。

Eureka服务端支持集群模式部署,当集群中有分片发生故障的时候,Eureka会自动转入自我保护模式。它允许在分片发生故障的时候继续提供服务的发现和注册,当故障分配恢复时,集群中的其他分片会把他们的状态再次同步回来。集群中的的不同服务注册中心通过异步模式互相复制各自的状态,这也意味着在给定的时间点每个实例关于所有服务的状态可能存在不一致的现象。

客户端:

Eureka客户端,主要处理服务的注册和发现。客户端服务通过注册和参数配置的方式,嵌入在客户端应用程序的代码中。在应用程序启动时,Eureka客户端向服务注册中心注册自身提供的服务,并周期性的发送心跳来更新它的服务租约。同时,他也能从服务端查询当前注册的服务信息并把它们缓存到本地并周期行的刷新服务状态。

服务端使用

    1. 导入依赖

             <groupId>org.springframework.cloud</groupId>
      
             <artifactId>spring-cloud-starter-eureka-server</artifactId>
      
         </dependency>
      
  • 2.springboot 配置文件application.properites修改

#服务注册中心实例的主机名

eureka.instance.hostname=localhost

#是否向服务注册中心注册自己

eureka.client.register-with-eureka=false

#是否检索服务

eureka.client.fetch-registry=false

#服务注册中心的配置内容,指定服务注册中心的位置

eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
  • 3. 启动类通过@EnableEurekaServer注解启动服务注册中心;

客户端使用

  • 1.依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

    1. 启动类上添加@EnableEurekaClient注解
    1. 配置
# 服务名,后续可通过服务名访问这个服务,而不需要写具体的ip、端口
spring.application.name=provider
#是否向服务注册中心注册自己
eureka.client.register-with-eureka=true
#是否检索服务
eureka.client.fetch-registry=true
eureka.client.serviceUrl.defaultZone=http://localhost:8080/eureka/

特性

  • 1.失效剔除:Eureka Server在启动的时候会创建一个定时任务,默认每隔一段时间(默认为60秒)将当前清单中超时(默认为90秒)没有续约的服务剔除出去。
  • 2.自我保护:Eureka Server在运行期间会统计心跳失败的比例在15分钟以之内是否低于85%,如果出现低于的情况,Eureka Server会将当前实例注册信息保护起来,让这些实例不会过期。这样做会使客户端很容易拿到实际已经不存在的服务实例,会出现调用失败的情况。因此客户端要有容错机制,比如请求重试、断路器。Eureka Server不会删除这个服务,而是继续保留。但此时已经无法判断服务提供者是否真的挂掉了,消费者请求这个服务很有可能会报错。关闭自我保护配置eureka.server.enable-self-preservation=false

集群

  • 集群就是多个Eureka Server互相注册,形成一个集群
  • 集群情况下:eureka server 配置有点区别:
    • eureka.client.register-with-eurekaeureka.client.fetch-registry设置为true

    • eureka.client.serviceUrl.defaultZone其他注册中心的注册地址,多个注册中心用逗号分割

  • 注意两个注册中心的eureka.instance.hostname不一样,DS Replicas才会有内容,实际部署中,注册中心一般都是在不同服务器上的

常见面试题

SpringCloud之Eureka的使用和常见的面试题