文档章节

SpringCloud系列第03节之注册中心Eureka进阶

吴伟祥
 吴伟祥
发布于 2019/03/20 09:35
字数 1158
阅读 57
收藏 0

自我保护模式

Eureka 在设计时,认为分布式环境的网络是不可靠的,可能会出现网络原因导致 EurekaServer 没有收到实例的心跳

而这却并不能说明实例就宕了,所以 EurekaServer 缺省会打开保护模式,它主要是网络分区场景下的一种保护

一旦进入保护模式,EurekaServer 将会尝试保护其服务注册表中的信息,不再删除里面的数据(即不会注销任何微服务)

相关介绍,详见:https://github.com/Netflix/eureka/wiki/Understanding-Eureka-Peer-to-Peer-Communication

在这种机制下,它仍然鼓励客户端再去尝试调用这个所谓 down 状态的实例,若确实调用失败,那么断路器就派上用场了

关于断路器,在接下来的系列文章中,我会详细介绍并演示

通过修改注册中心的配置文件 application.yml,即可打开或关闭注册中心的自我保护模式

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

踢出已关停的节点

自我保护模式打开时,已关停节点是会一直显示在 Eureka 首页的

关闭自我保护模式后,由于其默认的心跳周期比较长等原因,要过一会儿才会发现已关停节点被自动踢出了

若想尽快的及时踢出,那就只有修改默认的心跳周期参数了,如下所示

注册中心的配置文件 application.yml 需要修改的地方为

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

微服务的配置文件 application.yml 需要修改的地方为

eureka:
  instance:
    lease-renewal-interval-in-seconds: 5      # 心跳时间,即服务续约间隔时间(缺省为30s)
    lease-expiration-duration-in-seconds: 15  # 发呆时间,即服务续约到期时间(缺省为90s)
  client:
    healthcheck:
      enabled: true                           # 开启健康检查(依赖spring-boot-starter-actuator)

关于续期、心跳、发呆时间的关系,详见上一篇文章中的有关分析:https://jadyer.cn/2017/01/16/springcloud-eureka/

注意:更改 Eureka Server 的更新频率将打破注册中心的的自我保护功能
   生产环境不建议自定义这些配置,详见https://github.com/spring-cloud/spring-cloud-netflix/issues/373

注册服务慢的问题

修改微服务的 eureka.instance.lease-renewal-interval-in-seconds 参数(即心跳时间),便可解决此问题

详见:http://cloud.spring.io/spring-cloud-static/Camden.SR4/#_why_is_it_so_slow_to_register_a_service

服务状态UNKNOWN

如果把微服务的 eureka.client.healthcheck.enabled 属性配置在 bootstrap.yml 里面,可能会引起一些不良反应

比如,实际测试发现,Eureka 首页显示的服务状态,本应是 UP(1),却变成大红色的粗体 UNKNOWN(1)

Tips:bootstrap.yml 通常会在连接 Spring Cloud Config 搭建的配置中心时使用,接下来的本系列文章中会有介绍和演示

首页显示的微服务名

Eureka 首页显示的微服务名默认为:机器主机名:应用名称:应用端口

也就是:${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id:${server.port}}

我们也可以修改微服务的配置文件,定制它注册到注册中心时显示的名字,如下所示

eureka:
  instance:
    # instance-id: ${spring.application.name}                     # 修改显示的微服务名为:应用名称
    instance-id: ${spring.cloud.client.ipAddress}:${server.port}  # 修改显示的微服务名为:IP:端口

同样可以知道,两个相同的服务(端口不同),如果注册时设置的都是 eureka.instance.instance-id=${spring.application.name}

那么 Eureka 首页只会看到一个服务名字,而无法区分有几个实例注册上来了(因为注册上来的实例名都是相同的),这是要注意的

首页显示的微服务链接

既然微服务显示的名称允许修改,那么其对应的点击链接,也是可以修改的

同样的,还是修改微服务的配置文件,如下所示

eureka:
  instance:
    # ip-address: 192.168.6.66  # 只有prefer-ip-address=true时才会生效
    prefer-ip-address: true     # 设置微服务调用地址为IP优先(缺省为false)

Eureka 首页显示的微服务调用地址,默认是这样的:http://jadyer-pc:2100/info

而在设置 prefer-ip-address=true 之后,调用地址会变成:http://10.16.18.95:2100/info

这时若再设置 ip-address=192.168.6.66,则调用地址会变成:http://192.168.6.66:2100/info

本文转载自:https://jadyer.cn/2017/01/17/springcloud-eureka-advance/

吴伟祥

吴伟祥

粉丝 34
博文 501
码字总数 285832
作品 0
泉州
后端工程师
私信 提问
加载中

评论(0)

史上最简单的 SpringCloud 教程 | 终章

版权声明:本文为博主原创文章,欢迎转载,转载请注明作者、原文超链接 ,博主地址:http://blog.csdn.net/forezp。 https://blog.csdn.net/forezp/article/details/70148833 转载请标明出处...

方志朋
2017/04/12
0
0
史上最简单的 SpringCloud 教程

《史上最简单的 SpringCloud 教程》系列: 史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka) 史上最简单的SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon) 史上最...

外星人et59
2018/04/21
0
0
SpringCloud学习系列之三----- 断路器(Hystrix)和断路器监控(Dashboard)

前言 本篇主要介绍的是SpringCloud中的断路器(Hystrix)和断路器指标看板(Dashboard)的相关使用知识。 SpringCloud Hystrix Hystrix 介绍 Netflix创建了一个名为Hystrix的库,它实现了断路器模...

虚无境
2019/05/31
329
0
SpringCloud学习系列之四-----配置中心(Config)使用详解

前言 本篇主要介绍的是SpringCloud中的分布式配置中心(SpringCloud Config)的相关使用教程。 SpringCloud Config Config 介绍 Spring Cloud Config项目是一个解决分布式系统的配置管理方案。...

虚无境
2019/06/01
314
0
SpringCloud系列第02节之注册中心Eureka

简介 Eureka 是 Netflix 开发的,一个基于 REST 服务的,服务注册与发现的组件 它主要包括两个组件:Eureka Server 和 Eureka Client Eureka Client:一个Java客户端,用于简化与 Eureka Ser...

吴伟祥
2019/03/20
61
0

没有更多内容

加载失败,请刷新页面

加载更多

做了几年程序员,某天居然发现自己没学过数据结构。。。

原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者。 简介 学习编程,数据结构是你必须要掌握的基础知识,那么数据结构到底是什么呢? 根据百度百科的介绍,数据结构是计算机存...

黄小斜
29分钟前
53
0
正则表达式:删除包含“帮助”等的行

我有一个很长的命令文件。 使用Notepad ++或regex,我想删除所有包含“help”的行,包括keyboard_help等。 如何才能做到这一点? #1楼 在Notepad ++中执行此操作的另一种方法是在“查找/替换...

javail
31分钟前
40
0
百度飞桨口罩人脸检测与识别模型再升级,视频教学带你实战

自百度开源业界首个口罩人脸检测及分类模型之后,开发者社区进行了充分讨论并提出了该模型存在的一些问题和不足。在本文中,百度飞桨官方对这些反馈积极回应,同时提出四大升级方案,为开发者...

飞桨PaddlePaddle
38分钟前
42
0
2020教你如何更好地学习Java

学习是需要规划时间的,对于自学来说,需要有一个学习路线,因为大部分的人都是从零基础进行学习的,所以我建议大家一定要跟着大纲走,不然非常容易走偏。 首先放大纲 1.制定一个学习计划,没...

即将秃头的Java程序员
54分钟前
56
0
作为一名程序员找到一份java的工作需要学习哪些知识?

首先是Javase作为Java最基本的学习内容,不在多说。 然后是掌握JavaScript的基本原理,因为做Java编程开发必须学会JavaScript,用到JavaScript非常多,但是现在很多公司是不用去写原生的Jav...

Java天天
今天
59
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部