个人博客:兰陵笑笑生,欢迎浏览博客!java
上一章 SpringCloud基础教程(二)-服务发现 Eureka当中,咱们介绍了微服务组件当中的服务注册和发现组件程序员
Eureka,本章将继续探索Eurea在生产环境中的配置和使用。spring
在上一章当中,咱们初步了解了Eureka的使用,虽然最基本的场景,服务注册、服务发现和消费均可以实现。可是在实际的企业应用时候,就会遇到不少的自定义的配置。特别是在生产环境。segmentfault
在不添加任何配置的状况下,Eureka注册中心和服务之间是经过心跳机制来监测的,若是心跳正常,那么表明服务是能够用的。可是实际上不是这样。咱们开发的微服务组件,大多数都会依赖缓存Redis、搜素引擎Solr等等外部的资源。若是这些资源不能提供应用,虽然服务组件能与Eureka正常的保持心跳,可是在这样的状况下,服务的调用就不能得到预期的效果。在这里,咱们能够经过配置Eureka的健康检查,将服务组件的状态同步到Eureka中心。缓存
在开发的微服务组件中,修改application.xml 开启健康检查,默认是false,依赖心跳,这里修改为true,网络
eureka: client: healthcheck: enabled: true
并在pom.xml中添加actuator依赖(若是不添加,是不起做用的):app
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
Eureka中的实例包含了多种状态:UP、DOWN、STARTING、OUT_OF_SERVICE、UNKNOWN.这里咱们能够自定义的实现 org.springframework.boot.actuate.health.HealthIndicator 接口。经过HTTP接口手动的修改服务组件的状态,并同步到Eureka.(在实际的应用中,例如缓存宕机,就能够改变当前的服务组件的健康状态)。分布式
新建SelfHealthChecker的组件实现HealthIndicator接口,建立Health对象,当前服务的健康状态随着health的之变化而变化。ide
import org.springframework.boot.actuate.health.Health; import org.springframework.boot.actuate.health.HealthIndicator; import org.springframework.stereotype.Component; @Component public 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接口调用的方式,改变当前的微服务组件的健康状态:spring-boot
这个时候,再去查看Eureka的监控页面,就能够看到服务提供方的状态发生了变化:
这里咱们是能够根据本身的场景进行操做的
若是是本机搭建,首先在host文件中,配置以下的映射(若是不配置,而是使用localhost,那么服务注册的时候只能注册到一个Eureka实例中,缘由是eureka对localhost作了过滤。)
127.0.0.1 eureka7001.com 127.0.0.1 eureka7002.com 127.0.0.1 eureka7003.com
分别启动3个eureka实例,并在每一个实例的配置中配置其余可用的实例URL,以下
appcaiton-s1.xml
#eureka 服务端 spring: application: name: eureka-server server: port: 7001 eureka: 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-server server: port: 7002 eureka: 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-provider server: port: 9001 eureka: 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集群搭建,也对经常使用的配置进行了介绍。后期咱们会在这些基础之上继续探索更多的微服务功能!
以上就是本期的分享,你能够关注本博客的#Spring Cloud基础教程!#
还能够关注公众号: 程序员笑笑生,关注更多精彩内容!
本文由博客一文多发平台 OpenWrite 发布!
个人博客[兰陵笑笑生] ( http://www.hao127.com.cn/),欢...!