Eureka-数据解析

Eureka元数据详解

Eureka的元数据有两种:标准元数据和⾃定义元数据。
标准元数据: 主机名、 IP地址、端⼝号等信息,这些信息都会被发布在服务注册表中,⽤于服务之间的
调⽤。
⾃定义元数据: 可以使⽤eureka.instance.metadata-map配置,符合KEY/VALUE的存储格式。这 些元
数据可以在远程客户端中访问

server:
  port: 8091
spring:
  application:
    name: edu-service-autodeliver
  main:
    allow-bean-definition-overriding: true

# 注册到eureka注册中
eureka:
  client:
    service-url:
      # 使用逗号分隔 多个实例,
      defaultZone: http://EduCloudEurekaServerB:8762/eureka,http://EduCloudEurekaServerA:8761/eureka
  instance:
    prefer-ip-address: true #服务实例中显示ip,而不是显示主机名(兼容老的eureka版本)
    # 实例名称: 192.168.1.103:lagou-service-resume:8080,我们可以自定义它
    instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}:@project.version@
    # 自定义元数据
    metadata-map:
      cluster: cl1
      region: rn1
#management:
#  endpoints:
#    web:
#      exposure:
#   

DiscoveryClient 获取指定微服务的所有元数据信息

@Test
public void test() {
// 从EurekaServer获取指定微服务实例
List<ServiceInstance> serviceInstanceList =
discoveryClient.getInstances("lagou-service-resume");
// 循环打印每个微服务实例的元数据信息
for (int i = 0; i < serviceInstanceList.size(); i++) {
ServiceInstance serviceInstance = serviceInstanceList.get(i);
System.out.println(serviceInstance);
}

在这里插入图片描述

Eureka客户端详解

服务提供者(也是Eureka客户端)要向EurekaServer注册服务,并完成服务续约等⼯作
服务注册详解(服务提供者)
1)当我们导⼊了eureka-client依赖坐标,配置Eureka服务注册中⼼地址
2)服务在启动时会向注册中⼼发起注册请求,携带服务元数据信息
3) Eureka注册中⼼会把服务的信息保存在Map中

服务续约详解(服务提供者)
服务每隔30秒会向注册中⼼续约(⼼跳)⼀次(也称为报活),如果没有续约,租约在90秒后到期,然后
服务会被失效。每隔30秒的续约操作我们称之为⼼跳检测

#向Eureka服务中⼼集群注册服务
eureka:
instance:
# 租约续约间隔时间,默认30秒
lease-renewal-interval-in-seconds: 30
# 租约到期,服务时效时间,默认值90秒,服务超过90秒没有发⽣⼼跳, EurekaServer会将服务从
列表移除
lease-expiration-duration-in-seconds: 90

获取服务列表详解(服务消费者)

每隔30秒服务会从注册中⼼中拉取⼀份服务列表,这个时间可以通过配置修改。往往不需要我们调整

#向Eureka服务中⼼集群注册服务
eureka:
client:
# 每隔多久拉取⼀次服务列表
registry-fetch-interval-seconds: 30

1)服务消费者启动时,从 EurekaServer服务列表获取只读备份,缓存到本地
2)每隔30秒,会重新获取并更新数据
3)每隔30秒的时间可以通过配置eureka.client.registry-fetch-interval-seconds修改

Eureka服务端详解

服务下线
1)当服务正常关闭操作时,会发送服务下线的REST请求给EurekaServer。
2)服务中⼼接受到请求后,将该服务置为下线状态
失效剔除
Eureka Server会定时(间隔值是eureka.server.eviction-interval-timer-in-ms,默认60s)进⾏检查,
如果发现实例在在⼀定时间(此值由客户端设置的eureka.instance.lease-expiration-duration-inseconds定义,默认值为90s)内没有收到⼼跳,则会注销此实例。
⾃我保护
服务提供者 —> 注册中⼼
定期的续约(服务提供者和注册中⼼通信),假如服务提供者和注册中⼼之间的⽹络有点问题,不代表
服务提供者不可⽤,不代表服务消费者⽆法访问服务提供者

如果在15分钟内超过85%的客户端节点都没有正常的⼼跳,那么Eureka就认为客户端与注册中⼼出现了
⽹络故障, Eureka Server⾃动进⼊⾃我保护机制。
为什么会有⾃我保护机制?
默认情况下,如果Eureka Server在⼀定时间内(默认90秒)没有接收到某个微服务实例的⼼跳,
Eureka Server将会移除该实例。但是当⽹络分区故障发⽣时,微服务与Eureka Server之间⽆法正常通
信,⽽微服务本身是正常运⾏的,此时不应该移除这个微服务,所以引⼊了⾃我保护机制

在这里插入图片描述

当处于⾃我保护模式时
1)不会剔除任何服务实例(可能是服务提供者和EurekaServer之间⽹络问题),保证了⼤多数服务依
然可⽤
2) Eureka Server仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上,保证当前节
点依然可⽤,当⽹络稳定时,当前Eureka Server新的注册信息会被同步到其它节点中。
3)在Eureka Server⼯程中通过eureka.server.enable-self-preservation配置可⽤关停⾃我保护,默认
值是打开


eureka:
server:
enable-self-preservation: false # 关闭⾃我保护模式(缺省为打开)

建议⽣产环境打开⾃我保护机制

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值