我的博客:http://www.hao127.com.cn/,欢迎浏览博客!

   上一章 http://hao127.com.cn/#/view/65当中,我们介绍了微服务组件当中的服务注册和发现组件

Eureka,本章将继续探索Eurea在生产环境中的配置和使用。

前言

 在上一章当中,我们初步了解了Eureka的使用,虽然最基本的场景,服务注册、服务发现和消费都可以实现。但是在实际的企业应用时候,就会遇到很多的自定义的配置。特别是在生产环境。

一、Eureka的健康检查

 在不添加任何配置的情况下,Eureka注册中心和服务之间是通过心跳机制来监测的,如果心跳正常,那么代表服务是可以用的。但是实际上不是这样。我们开发的微服务组件,大多数都会依赖缓存Redis、搜素引擎Solr等等外部的资源。如果这些资源不能提供应用,虽然服务组件能与Eureka正常的保持心跳,但是在这样的情况下,服务的调用就不能获得预期的效果。在这里,我们可以通过配置Eureka的健康检查,将服务组件的状态同步到Eureka中心。

 在开发的微服务组件中,修改application.xml 开启健康检查,默认是false,依赖心跳,这里修改成true,

eureka:  client:    healthcheck:      enabled: true

 并在pom.xml中添加actuator依赖(如果不添加,是不起作用的):

   org.springframework.boot        spring-boot-starter-actuator    

 Eureka中的实例包含了多种状态:UP、DOWN、STARTING、OUTOFSERVICE、UNKNOWN.这里我们可以自定义的实现 org.springframework.boot.actuate.health.HealthIndicator 接口。通过HTTP接口手动的修改服务组件的状态,并同步到Eureka.(在实际的应用中,例如缓存宕机,就可以改变当前的服务组件的健康状态)。

 新建SelfHealthChecker的组件实现HealthIndicator接口,创建Health对象,当前服务的健康状态随着health的之变化而变化。

import org.springframework.boot.actuate.health.Health;import org.springframework.boot.actuate.health.HealthIndicator;import org.springframework.stereotype.Component;@Componentpublic class SelfHealthChecker implements HealthIndicator {    private boolean health = true;    @Override    public Health health() {        if (health) {            return new Health.Builder()                .withDetail("a", 10).withDetail("b", "up").up().build();        } else {            return new Health.Builder()                .withDetail("error", "client is down").down().build();        }    }    public boolean isHealth() {        return health;    }    public void setHealth(boolean health) {        this.health = health;    }}

 新建控制器,注入自定义的健康检查组件,可以通过HTTP接口调用的方式,改变当前的微服务组件的健康状态:

这个时候,再去查看Eureka的监控页面,就可以看到服务提供方的状态发生了变化:

这里我们是可以根据自己的场景进行操作的

二、 Eureka高可用集群

 如果是本机搭建,首先在host文件中,配置如下的映射(如果不配置,而是使用localhost,那么服务注册的时候只能注册到一个Eureka实例中,原因是eureka对localhost做了过滤。)

127.0.0.1 eureka7001.com127.0.0.1 eureka7002.com127.0.0.1 eureka7003.com

 分别启动3个eureka实例,并在每个实例的配置中配置其他可用的实例URL,如下

 appcaiton-s1.xml

#eureka 服务端spring:  application:    name: eureka-serverserver:  port: 7001eureka:  instance:    hostname: eureka7001.com  #服务端的实例名称  client:    service-url:       # 设置与注册中心交互的url ,      #defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/       defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/    #false表示自己就是服务中细腻    fetch-registry: false    #注册自己到注册中心    register-with-eureka: true    healthcheck:      enabled: false

 appcaiton-s2.xml

#eureka 服务端spring:  application:    name: eureka-serverserver:  port: 7002eureka:  instance:    hostname: eureka7002.com  #服务端的实例名称  client:    service-url:       # 设置与注册中心交互的url ,      #defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/       defaultZone: http://eureka7003.com:7003/eureka/,http://eureka7001.com:7001/eureka/       #false表示自己就是服务中细腻    fetch-registry: false    #注册自己到注册中心    register-with-eureka: true    healthcheck:      enabled: false

 appcaiton-s3.xml

#eureka 服务端spring:  application:    name: eureka-server    server:  port: 7003  eureka:  instance:    hostname: eureka7003.com  #服务端的实例名称  client:    service-url:       # 设置与注册中心交互的url ,      #defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/       defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/       #false表示自己就是服务中细腻    fetch-registry: false    #注册自己到注册中心    register-with-eureka: true    healthcheck:      enabled: false

 打开eureka任何一个示例的监控中心,可以看到,每个eureka将自己也注册到了集群中了。

服务注册:分别将服务提供方和服务调用方启动,注册到eureka集群中,例如服务提供方的配置文件applicaiton.yml配置如下:配置的eureka示例只要配置集群任何一个eureka示例就可以了

#服务提供方spring:  application:    name: server-providerserver:  port: 9001eureka:  instance:    hostname: eureka7002.com  #eureka服务端的实例名称  client:    service-url:       # 与注册中心交互的url      defaultZone: http://eureka7002.com:7002/eureka/      enabled: true

 通过集群监控面板可以看到如下的信息。这个时候,服务调用方就可以调用服务提供方接口了,就算eureka实例宕机一台,也不影响服务的调用。

三、自我保护模式

 eureka在设计时候充分考虑到了分布式环境网络的不可靠。因为网络的原因会导致eureka的server没有收到心跳,但是并不能说明eureka是宕机了。所以Eureka Server默认会打开保护模式。

 一旦进入保护模式,eureka不是删除里面的服务注册列表数据,即不会立刻注销任何微服务。服务调用者任然尝试调用服务提供者。如果调用失败,则会使用熔断模式。当网络故障恢复后,eureka会自动的退出自我保护模式。

 修改配置的yml,打开或者关闭注册中心的为我保护模式,false代表关闭。

eureka:  server:    enable-self-preservation: false

四、其他配置

 eureka默认的服务名称是

${spring.cloud.client.hostname}:${spring.application.name}:${spring.applicaiton.instance_id}:${port}:

 如图:

这里我们可以直接修改,修改成如下图

eureka:  instance:    instance-id: P1

  自定义Eureka的控制台服务链接

  Eureka首页显示服务调用的地址默认是 http:hostName:port/

  可以通过配置

eureka:  instance:    prefer-ip-address: true  #设置服务调用IP为先

如下图:

修改后:单击服务变成了ip调用:

五、总结

 本章讲解了Eureka的进阶内容,包括Eureka健康检查、生产环境的Eureka集群搭建,也对常用的配置进行了介绍。后期我们会在这些基础之上继续探索更多的微服务功能!

 以上就是本期的分享,你可以关注本博客的#http://hao127.com.cn/#

​  还可以关注公众号: 程序员笑笑生,关注更多精彩内容!

yml eureka defaultzone 只生效第一个_SpringCloud基础教程(三)-Eureka进阶相关推荐

  1. eureka hostname作用_SpringCloud基础教程(三)-Eureka进阶

       我的博客:http://www.hao127.com.cn/,欢迎浏览博客!    上一章 http://hao127.com.cn/#/view/65当中,我们介绍了微服务组件当中的服务注册和 ...

  2. springsecurity中,使用successHandler和defaultSuccessUrl(successForwardUrl)连用,只生效一个的问题

    开发中,碰到既要设置成功登录后跳转到指定页面,而不是springsecurity中默认的index页面,又要登录成功后要做一些操作,比如某个用户的权限菜单获取.如果successHandler和def ...

  3. java四神兽_SpringCloud五大神兽之Eureka

    注册中心概述 什么是注册中心? 相当于服务之间的'通讯录',记录了服务和服务地址之间的映射关系.在分布式架构中服务会注册到这里.当服务需要调用其他服务时,就在注册中心找到其他服务的地址,进行调用 注册 ...

  4. java cloud五大神兽_SpringCloud五大神兽之Eureka

    注册中心概述 什么是注册中心? 相当于服务之间的'通讯录',记录了服务和服务地址之间的映射关系.在分布式架构中服务会注册到这里.当服务需要调用其他服务时,就在注册中心找到其他服务的地址,进行调用 注册 ...

  5. 2016 只剩最后一个月 你的 技术债务 还清了吗?

    一夜醒来,猛然发现,2016 已经只剩最后一个月了! 回忆过去的 330 多个日与夜,哪些互联网圈的大事让你瞠目结舌? 也许是 AlphaGo 在堪称人脑游戏巅峰的围棋领域屡战告捷: 也许是 Poké ...

  6. 欢迎大家讨论:只想要一个最简单的XXX系统,功能最简化的XXX系统

    我们国人总有一种思想,能简化的简化,但是往往我们把真正应该简单化的东西反而没简单化,例如我们的人际关系.一些比较传统的封建思想,往往这些最应该简化的东西是更加搞得深入.复杂. 其实很多东西是简化不来的 ...

  7. C# WinForm只允许运行一个窗体实例

    大概看了看别人的方法,都是从语法的角度巧妙实现的. 我要实现的目的是dialogForm.Show(); 点击按钮显示对话框窗体,如果窗体没有关闭,再次点击,不重复显示. 我用了个笨方法,就是用一个静 ...

  8. Jquery validate验证表单只验证第一个input元素

    jQuery Validate 使用方式在这篇文章 jQuery Validate 使用jquery.validate插件对表单进行验证时,当name属性相同,或者没有设置name属性时,则valid ...

  9. ASP.NET查询页面设置form的action属性只弹出一个页面,并且每次将页面设置到最前...

    背景 当数据量大.查询条件复杂,多样多的时候,我们可能需要单独做一个查询界面,当用户选择设置了相关的查询条件后,点击[查询]按钮,系统就弹出一个新的页面展示出根据条件查询出的数据集. 然后,用户每点[ ...

最新文章

  1. SBIO | 西农韦革宏组-大豆土壤细菌门间负向互作影响群落的动态变化和功能
  2. 假笨说-类初始化死锁导致线程被打爆!打爆!爆!
  3. 数组可以容纳多少水----------给你出道题
  4. git 删除分支_深入浅出图解Git,入门到精通(保姆级教程)
  5. C语言基础教程篇之环境如何设置
  6. 第一款无代码应用平台搭建的设备管理系统
  7. 齐齐哈尔计算机科学与技术学院,齐齐哈尔职工大学官网
  8. 如何学习三点透视?该注意什么?
  9. 《高等统计物理学》5:非平衡态统计物理初步
  10. java问卷导入excel_Java利用已有的Excel文件导出新的Excel
  11. 常见神经系统疾病的临床诊断及处理原则题库【1】
  12. 联想笔记本打字不显示选字框
  13. 将示波器信号完整数据导入Matlab进行分析
  14. 大三了#我的两年编程生活
  15. js关闭当前弹出的小窗口并打开新窗口
  16. 解决Cookie乱码问题
  17. 服务器性能巡检,linux服务器巡检性能与Java 进程脚本
  18. 浙江省2020年计算机二级题库,2020年9月浙江省计算机二级易考套餐:二级VB考试题库+教材...
  19. HTML5期末大作业:美食网站设计——美食汇-美食菜谱(5页) HTML+CSS+JS网页设计期末课程大作业
  20. toFixed(2)

热门文章

  1. 用软件测试管理效率,软件测试攻略(一):效率工具分享
  2. java将图片保存进mysql_Java存储图片到Mysql
  3. nfs mysql_heatbeat-gui实现基于nfs的mysql高可用集群
  4. 如何展示富文本_自助建站如何做出个性化效果?
  5. 利用python安装opencv_OpenCV Python安装教程
  6. Android开发之常见面试题Activity跳转生命周期变化
  7. matlab球心投影,球心投影
  8. javascript全栈开发实践-web-4
  9. c#正则匹配取出文本内容 循环输出
  10. MYSQL 去除重复 记录