Skip to content

eureka配置与使用

eureka:服务注册和发现,为消费者提供服务。

一、依赖

<!--eureka注册中心依赖-->
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<!--eureka客户端依赖-->
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

二、eureka 注册中心配置

springboot 启动类增加 eureka 注解 @EnableEurekaServer,配置文件增加:

eureka:
  instance:
    hostname: localhost
  client:
    #声明自己是个服务端
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

集群配置文件:

spring:
  application:
    name: eureka-server

eureka:
  client:
    serviceUrl:
      defaultZone: http://eurekaServer1:10101/eureka/,http://eurekaServer2:10102/eureka/
    # 此应用为注册中心,false:不向注册中心注册自己,否则启动会报错
    register-with-eureka: false
    # 注册中心职责是维护服务实例,false:不检索服务。
    fetch-registry: false
---
server:
  port: 10101
spring:
  profiles: eurekaServer1
eureka:
  instance:
    hostname: eurekaServer1

---
server:
  port: 10102
spring:
  profiles: eurekaServer2
eureka:
  instance:
    hostname: eurekaServer2

三、eureka 客户端配置

需要在配置文件增加 eureka 服务的注册,将服务注册到注册中心里供消费。

#指定注册中心地址
eureka:
  client:
    serviceUrl:
      #注册中心地址
      defaultZone: http://localhost:10100/eureka/

#服务的名称
spring:
  application:
    name: product-service

四、服务注册中心注解 @EnableDiscoveryClient 和 @EnableEurekaClient

从 Spring Cloud Edgware 开始,@EnableDiscoveryClient@EnableEurekaClient 可省略。只需加上相关依赖,并进行相应配置即可将微服务注册到服务发现组件上。

  • 共同点:都是能够让注册中心能够发现、扫描到该服务。
  • 不同点:@EnableEurekaClient 只适用于 Eureka 作为注册中心;@EnableDiscoveryClient 可以是其他注册中心。

五、常见问题

5.1 自我保护

Eureka 管理后台出现红色字体警告:

EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.

说明:服务端进入自我保护模式,通常是短时间内丢失过多客户端心跳时触发,认为是网络问题而不是服务下线。

关闭检查方法:eureka 服务端配置文件加入:

eureka:
    server:
        enable-self-preservation: false

注意:生产环境自我保护模式禁止关闭(默认开启 true),关闭后心跳失败的实例会被立即剔除,在网络抖动时会造成服务大面积不可用。