Eureka 知识点总结

知识点总结

一. Eureka Server (以下简称ES)

  1. 在服务不是正常下线的情况下,ES 会每隔 60s(默认值) 将当前清单中超时 90s(默认值) 没有续约(心跳)的服务剔除。
  2. 在 ES 出现15分钟内统计心跳失败比例(本人认为是15分钟内统计的心跳次数)低于百分之85的情况下。会出现自我保护状态(ES 页面出现红色警告 EMERGENCY……)。ES 会将当前的服务实例保护起来,让这些实例不会过期,尽可能保护这些注册信息(本地很容易出现这种状态,生产环境出现的原因一般会因为 ES 网络波动), 关闭:eureka.server.enableSelfPreservation=false。
  3. 默认情况下 ES 是通过心跳来检测一个服务是否可用的,这种检测机制很不可靠,如果一个服务的数据库链接、redis 链接、消息代理失效了,我们也应当认为它是不可用的服务。为了更准确的确认服务的可用性,我们只需依赖 spring-boot-starter-actuator 模块,并设置 eureka.client.healthcheck.enabled=true 即可。如果客户端的 /health 端点做了特殊处理,比如前缀等等,也要做相应的处理。 如:eureka.instance.health-check-url-path=PREFIX/health

二. Eureka Client (以下简称EC)

  1. 服务续约(心跳)间隔时间:30s
  2. 服务失效时间:90s(即90秒内没有心跳则从注册中心剔除)
  3. 获取服务实例清单间隔:30s
  4. EC 启动后,不会立即向 ES 注册,他有一个延迟向服务端注册的时间,40s(默认值)
  5. 刚刚注册的 EC 也不会立即被其他服务调用,因为每个 EC 获取新实例列表的时间是 30s

三.详细配置

配置前缀:eureka.client

更加详细的配置看源码 org.springframework.cloud.netflix.eureka.EurekaClientConfigBean

参数名 说明 默认值
enabled 启动 Eureka 客户端 true
registryFetchIntervalSeconds 从 Eureka 服务端获取注册信息的间隔时间,单位秒 30
instanceInfoReplicationIntervalSeconds 更新实例信息的变化到 Eureka 服务端的间隔时间,单位秒 30
initialInstanceInfoReplicationIntervalSeconds 初始化实例信息到 Eureka 服务端的间隔时间,单位秒 40
eurekaServiceUrlPollIntervalSeconds 轮询 Eureka 服务端地址更改的间隔时间,单位秒。当我们与 Spring Cloud Config 配合时,动态刷底 Eureka 的 serviceUrl 地址时需要关注该参数 300
eurekaServerReadTimeoutSeconds 读取 ES 信息的超时时间,单位秒 8
eurekaServerConnectTimeoutSeconds 链接 ES 的超时时间,单位为秒 5
eurekaServerTotalConnections 从 Eureka 客户端到所有 Eureka 服务端的链接总数 200
eurekaServerTotalConnectionsPerHost 从 Eureka 客户端到每个 Eureka 服务端主机的链接总数 50
eurekaConnectionIdleTimeoutSeconds Eureka 服务端链接的空闲关闭时间,单位为秒 30
heartbeatExecutorThreadPoolSize 心跳连接池的初始化线程数 2
heartbeatExecutorExponentialBackOffBound 心跳超时重试延迟的最大乘数值 10
cacheRefreshExecutorExponentialBackOffBound 缓存刷新超时重试延迟的最大乘数值 10
useDnsForFetchingServiceUrls 使用 DNS 来获取 Eureka 服务端的 ServiceUrl false
registerWithEureka 是否要将自身的实例信息注册到 Eureka 服务端 true
preferSameZoneEureka 是否偏好使用处于相同 Zone 的 Eureka 服务端 true
filterOnlyUpInstances 获取实例时是否过滤,仅保留 UP 状态的实例 true
fetchRegistry 是否从 Eureka 服务端获取注册信息 true
healthcheck.enabled 使用 /health 检测服务是否可用(需要依赖 actuator 模块) false

配置前缀:eureka.instance

更加详细的配置看源码 org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean

参数名 说明 默认值
preferIpAddress 是否有优先使用 IP 地址作为主机名的标识 false
leaseRenewalIntervalInSeconds Eureka 客户端向服务端发送心跳的时间间隔,单位秒 30
leaseExpirationDurationInSeconds Eureka 服务端在收到最后一次心跳之后等待的时间上限,单位秒。超过该时间后服务端会将服务实例从服务清单中剔除,从而禁止服务调用请求被发送到该实例上 90
nonSecurePort 非安全的通信端口 80
securePort 安全的通信端口 443
nonSecurePortEnabled 是否启动非安全的通信端口 true
securePortEnabled 是否启动安全的通信端口
appname 服务名,默认取 spring.application.name 的配置值,如果没有则为 UNKNOWN
hostname 主机名,不配置的时候将根据操作系统的主机名来获取

在上面的 eureka.instance 配置中,除了前三个配置参数在需要的时候可用做一些调整,其他的参数配置大多数情况下不需要进行配置,使用默认值即可。

四.快速搭建(Spring Cloud Dalston.SR5)

4.1 Eureka Server:

pom.xml

        <!-- 可选 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!-- 必须依赖 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
        </dependency>

application.yml

server:
  port: 8701

eureka:
  client:
    service-url:
      defaultZone: http://peer2:8702/eureka/ #另一个 es 的地址

spring:
  application:
    name: eureka-server

启动类添加注解:

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}
4.2 Eureka Client:

pom.xml

        <!-- 必须依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>

application.yml

server:
  port: 8731

eureka:
  client:
    service-url:
      defaultZone:  http://sc:8701/eureka/,http://sc:8702/eureka/
    healthcheck:
      enabled: true


spring:
  application:
    name: zy-service

management:
  security:
    enabled: false #关闭访问 health 需要权限的问题。

启动类添加注解:

@SpringBootApplication
@EnableDiscoveryClient
public class EurekaClientApplication {

    public static void main(String[] args) {
       SpringApplication.run(EurekaClientApplication.class, args);
    }

}

参考资料
Spring Cloud 微服务实战

猜你喜欢

转载自blog.csdn.net/LNView/article/details/81414401
今日推荐