7) Eureka服务注册与发现

代码示例

Eureka Server

@EnableEurekaServer

eureka:
  server:
    eviction-interval-timer-in-ms: 1000 #设置清理的间隔时间,而后这个时间使用的是毫秒单位(默认是60秒,如果不配置,服务停止之后,仍然显示在Eureka上)
    enable-self-preservation: true #设置为false表示关闭保护模式(保护模式就是防止服务以外down了之后,不会立即清理掉,还能保留在注册中心一段时间)
  instance:
    hostname: localhost
  client:
    #声明自己是个服务端
    registerWithEureka: false #表示不向注册中心注册自己
   fetchRegistry: false #是否获取注册信息,表示自己端就是注册中心,只是维护实例
   serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
Eureka Client

@EnableDiscoveryClient

eureka:
  client: #作为服务消费者的配置
    healthcheck:
      enabled: true
    fetch-registry: true
    register-with-eureka: true
    instance-info-replication-interval-seconds: 10 #每隔10秒扫描一次本地实例,如果有变化向服务重新注册
    registry-fetch-interval-seconds: 10 #缓存清单更新时间,默认30秒
  instance: #作为服务提供者的配置
    prefer-ip-address: true
    instance-id: ${spring.application.name}:${spring.application.instance_id:${server.port}}
    lease-renewal-interval-in-seconds: 5 #服务续租间隔,默认是30秒
    lease-expiration-duration-in-seconds: 10 #服务时效时间,默认是90秒
    status-page-url-path: ${management.endpoints.web.base-path}/info
    health-check-url-path: ${management.endpoints.web.base-path}/health

management: #actuator
  endpoints:
    web:
      base-path: /management
      exposure:
        include: '*'

Eureka关键核心概念和原理:

  • 服务注册
    服务提供者在启动的时候,通过REST方式将自己注册到Eureka Server上,同时带上自身的元数据。
    服务端通过一个map保存这些元数据。

  • 服务同步
    两个服务注册到两个eureka server上,集群间会相互转发保持服务同步。

  • 服务续约
    客户端默认每隔30秒发送心跳,Eureka server会有定时任务每60秒将清单中超过默认90秒没有续约的服务剔除。
    eureka.instance.lease-renewal-interval-in-seconds=30
    eureka.instance.lease-expiration-duration-in-seconds=90

  • 服务离开
    如果服务不是正常下线,注册中心没有收到下线请求,会导致服务不能主动下线.

  • 服务剔除
    eureka server在启动时会创建一个定时任务,默认60秒将清单中超时(90秒)没有续约的服务剔除。

  • 客户端从注册中心获取服务列表
    客户端会缓存一份服务列表,默认30从服务端拉取数据,同时服务端如果检测到有变动,会主动通知客户端。
    eureka.client.fetch-registery=true
    缓存清单更新时间,默认30秒
    eureka.client.registery-fetch-interval-seconds=30

  • 客户端的服务调用
    feign或者ribbon+restTemplate

  • Eureka的自我保护机制
    eureka server的自我保护机制,会在运行期间统计心跳失败的比例在15分钟之内是否低于85%,会将当前实例注册信息保护起来,让实例不会过期,但是如果实例真的有问题,则调用会失败,这样就需要使用请求重试或者断路器等机制。
    eureka.server.enable-self-preservation=false来关闭自我保护机制(开发)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容