实例名配置
在Netflix Eureka的原生实现中,实例名采用主机名作为默认值,这样的设置使得在同一主机上无法启动多个相同的实例,所以在Spring Cloud Eureka的配置中,针对同一主机启动多个实例的情况,采用如下规则:
eureka.instance.instanceId=${spring.application.name}:${random.int}
利用应用名加随机数的方式来区分不同的实例,从而实现同一主机上,不指定端口就能轻松启动多个实例的效果。
端点配置
在InstanceInfo中,我们可以看到一些URL的配置信息,比如homePageUrl、statusPageUrl、healthCheckUrl,他们分别代表了应用主页状态URL、状态也的URL、健康检查URL。其中状态页和健康检查的URL在Spring Cloud Eureka中默认使用了spring-boot-actuator 模块提供的/info 端点和/health 端点。
大多数情况下,我们并不需要修改这几个URL的配置,但是如果设置了context-path,这时,所有的spring-boot-actuator模块的监控端点都会增加一个前缀。所以需要做如下修改:
management.context-path=/hello
eureka.instance.statusPageUrlPath=${management.context-path}/info
eureka.instance.healthCheckUrlPath=${management.context-path}/health
健康检查
默认情况下,Eureka中各个服务实例的健康检查并不是通过spring-boot-actuator模块的/health端点来实现的,而是依靠客户端心跳方式来保持服务实例的存活。除非心跳停止,服务中心才会将其剔除。
默认的心跳实现方式可以有效检查客户端进程是否正常运作,但却无法保证客户端应用能够正常提供服务。由于大多数微服务应用都会有一些其他资源的依赖,比如数据库、缓存、消息代理等,如果应用无法联通这些资源的时候,实际已经不能正常提供服务了,但是心跳检查还在,还是会被消费者调用,这样无法达到实际的效果。
在Spring Cloud Eureka中,我们可以通过简单的配置,把Eureka客户端的健康检查交给 spring-boot-actuator 模块的 /health 端点,以实现更加全面的健康状态维护。
在pom.xml中引入spring-boot-actuator 模块依赖。
在application.properties中增加参数配置 eureka.client.healthcheck.enabled=true;