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

- 配置健全狀態檢查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應用配置延遲發布
登入EDAS控制台。
在左側導覽列,單擊。
- 在应用列表頁面選擇地區和所屬微服務空間,然後單擊需要無損上線的應用程式名稱。
- 在應用基本信息頁面的應用設定地區JVM參數右側單擊编辑。
- 在應用設定對話方塊單擊自訂,在自訂參數文字框中輸入-Dhsf.publish.delayed=true,然後單擊配置JVM參數。配置延遲發布之後,HSF應用不會立刻發布,而是收到上線指令碼通知後才發布。
- 登入HSF應用部署的ECS執行個體進行驗證。
- 執行telnet localhost 12201登入ECS執行個體。
- 執行cd hsf進入HSF目錄。
- 執行ls查看服務的發布狀態。

掛載自動上線指令碼
登入EDAS控制台。
在左側導覽列,單擊。
- 在应用列表頁面選擇地區和所屬微服務空間,然後單擊需要無損上線的應用程式名稱。
- 在應用基本信息頁面的應用設定地區單擊掛載指令碼。
- 在掛載指令碼對話方塊單擊啟動後指令碼,輸入以下掛載指令碼。
grep "PANDORA QOS PORT" /home/admin/edas-assist/edas-assist.pid | sed 's/\x0D$//' | awk -F":" '{ print "curl localhost:"$2"/hsf/online?k=hsf"}'| sh掛載指令碼說明:- edas-assist.pid檔案內容
PID:19426 HSF PORT:12200 PANDORA QOS PORT:12203 MONITOR PORT:8006 CSP PORT:8719 - /home/admin/edas-assist/edas-assist.pid為記錄Pandora Boot運行連接埠號碼的檔案。Pandora Boot連接埠號碼會在EDAS-Container啟動後隨機產生,一般為12201。當連接埠發生衝突時,會依次遞增。
- curl localhost:"$2"/hsf/online?k=hsf命令用於執行上線操作,通知容器進行HSF服務發布,使用者也可以手動調用該命令。
- edas-assist.pid檔案內容
結果驗證
驗證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.