本文介绍在EDAS中如何无损上线HSF应用。
前提条件
- 请确保您的EDAS Container版本为3.5.7及以上版本。如果您的EDAS Container版本低于3.5.7,请升级。具体操作,请参见升级或降级运行时环境。
- 请确保您的应用已经配置了健康检查URL。
要实现HSF应用的无损上线,首先需要配置应用的健康检查URL,以便挂载应用启动后自动执行的脚本,告知EDAS应用何时启动成功。
EDAS默认不会开启健康检查URL,需要在应用代码中创建并配置对应的Controller。
@RestController public class HealthCheckController { @RequestMapping("/health") public String healthCheck(){ return "success"; } }
相比端口号健康检查,URL健康检查可以更加准确地反映出应用的健康状况。
- 配置健康检查URL前。
- 配置健康检查URL后。
背景信息
在应用启动过程中,服务会到注册中心进行注册,订阅该服务的消费者在收到通知后则可以向服务提供者发起调用。由于应用启动是一个持续进行的过程,在这个过程中,可能存在服务已经发布,但其依赖的组件(例如Redis或数据库资源)未完成初始化的情况。如果此时有流量进入,会直接导致调用失败。为了避免调用失败的风险,可以使用HSF的无损上线功能。
HSF所有的ProviderBean在初始化阶段都不会注册到注册中心,而是等Spring容器中所有Bean初始化成功并发出RefreshEvent事件后,再进行注册。同时,Pandora会在所有服务注册后设置status为true。
运维需要配合,在启动app server(tomcat)
后,启动Web server前,发送curl localhost:12201/hsf/status命令来检测服务是否初始化完毕,成功之后再启动Web server(Apache/NGINX)。
为HSF应用配置延迟发布
挂载自动上线脚本
结果验证
验证HSF应用无损上线包含QoS和日志两种方式。
- QoS
配置完脚本以后,执行部署应用、重置等操作时,即可以实现HSF应用的无损上线。登录该应用部署的ECS实例,观察服务的发布状态。
- 日志
在/home/admin/logs/hsf/hsf.log中观察是否包含如下日志。包含即代表HSF接收到了上线命令。
01 2019-11-26 16:23:03.456 INFO [qos-worker-3-1:t.hsf] [38ef6d01-10a8-405d-8725-bd7bf121****] [] [] Receive online command.Do HSF online.