微服务Springcloud超详细教程+实战(十)

本人正在找深圳Java实习工作,求大佬带飞 QQ:1172796094
如在文档中遇到什么问题请联系作者
——————————————————————————————————————

服务消费者

获取服务列表

当服务消费者启动时,会检测eureka.client.fetch-registry=true参数的值,如果为true,则会从Eureka Server注册中心拉取服务列表,然后缓存在本地。并且每隔30秒会重新获取并更新数据。我们可以通过下面的参数来修改:

eureka:
  client:
    registry-fetch-interval-seconds: 5

生产环境中,我们不需要修改这个值。

但是为了在开发环境下,能够快速得到服务的最新状态,我们可以将其设置小一点。

失效剔除和自我保护

失效剔除

有些时候,我们的服务提供方并不一定会正常下线,可能因为内存溢出、网络故障等原因导致服务无法正常工作。Eureka Server需要将这样的服务剔除出服务列表。因此它会开启一个定时任务,每隔60秒对所有失效的服务(超过90秒未响应)进行剔除。

可以通过eureka.server.eviction-interval-timer-in-ms参数对其进行修改,单位是毫秒,生成环境不要修改。

这个会对我们开发带来极大的不便,你对服务重启,隔了60秒Eureka才反应过来。开发阶段可以适当调整,比如 5S

在这里插入图片描述

自我保护

我们关停一个服务(等待30s左右),就会在Eureka面板看到一条警告:
在这里插入图片描述
这是触发了Eureka的自我保护机制。当一个服务未按时进行心跳续约时,Eureka会统计最近15分钟心跳失败的服务实例的比例是否超过了85%。在生产环境下,因为网络延迟等原因,心跳失败实例的比例很有可能超标,但是此时就把服务剔除列表并不妥当,因为服务可能没有宕机。Eureka就会把当前实例的注册信息保护起来,不予剔除。生产环境下这很有效,保证了大多数服务依然可用。

但是这给我们的开发带来了麻烦, 因此开发阶段我们都会关闭自我保护模式:

在eureka的yml文件中配置

eureka:
  server:
    enable-self-preservation: false # 关闭自我保护模式(默认为打开)
    eviction-interval-timer-in-ms: 1000 # 扫描失效服务的间隔时间(缺省为60*1000ms)

在这里插入图片描述

注意点

1 eureka服务器停止之后,服务调用方和服务消费方会报错,原因是啥?

答:当服务注册到eureka之后,每隔30s需要向eureka注册中心发送心跳(续约renew),表示我还活着,当90s内没有发送心跳,表明eureka任务此服务暂时无法向外提供服务,就把它保护起来,然后在接下来的15分以内,eureka会不断的请求这个服务,如果得到正常的响应,就把它调出来,继续提供服务,如果15分钟以内,eureka还是收不到响应,那就把它移除服务列表

2 当停止eureka注册中心之后,服务消费方还可以使用服务提供方吗?

答:可以,因为有缓存

3 服务提供方/服务消费方 是何时去eureka注册中心获取其他服务的ip地址和端口号的?

答:结论:第一次启动的30以内,去eureka注册中心拉取其他服务缓存到本地

4 如果 停止eureka注册中心之后,修改服务提供方的端口,此时服务调用方就无法请求服务
5 在不停止eureka注册中心的情况下,如果修改服务提供方的端口,那此时服务调用方会收到响应吗?

答: 需要等待几分钟,可以继续提供新端口的服务

6、eureka中是以双层map结构(嵌套map)保存服务信息

猜你喜欢

转载自blog.csdn.net/weixin_41838683/article/details/84990689