本文介紹在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.