目錄
Nacos健康檢查
兩種健康檢查機制
Nacos服務類型實例
Nacos環境隔離
創建namespace
配置namespace
Nacos健康檢查
兩種健康檢查機制
Nacos作為注冊中?, 需要感知服務的健康狀態, 才能為服務調??提供良好的服務.
Nacos 中提供了兩種健康檢查機制:
客?端主動上報機制:
? 客?端通過?跳上報?式告知服務端(nacos注冊中?)健康狀態, 默認?跳間隔5秒;
? nacos會在超過15秒未收到?跳后將實例設置為不健康狀態, 超過30秒將實例刪除
服務器端反向探測機制:
? nacos主動探知客?端健康狀態, 默認間隔為20秒.
? 健康檢查失敗后實例會被標記為不健康, 不會被?即刪除.
Nacos 中的健康檢查機制不能主動設置,健康檢查機制是和 Nacos 的服務實例類型強相關的.?
Nacos服務類型實例
? 臨時實例: 如果實例宕機超過?定時間, 會從服務列表剔除, 默認類型.? ?臨時實例: 如果實例宕機, 不會從服務列表剔除, 也可以叫永久實例 .
Nacos對臨時實例, 采取的是 客?端主動上報機制, 對?臨時實例, 采取服務器端反向探測機制.
開啟服務:
關閉其中的服務:
?由此我們發現,并沒有
設置實例為非臨時實例
spring:cloud:nacos:discovery:ephemeral: false # 設置為?臨時實例
啟動服務:
此時我們發現,修改臨時實例為非臨時實例,重啟服務都會失敗。
原因:
Nacos會記錄每個服務實例的IP和端?號, 當發現IP和端?都沒有發?變化時, Nacos不允許?個服務實例類型發?變化, ?如從臨時實例,變為?臨時實例, 或者從?臨時實例, 變成臨時實例。
解決辦法:
1. 停掉nacos
2. 刪除nacos ?錄下 /data/protocol/raft 信息, ??會保存應?實例的元數據信息。
啟動服務
為什么我們啟動服務而且沒有停止服務,卻顯示健康狀態為fasle呢?
解決方法:將非臨時實例(持久化實例)修改為臨時實例。
啟動服務
Nacos環境隔離
企業開發中, ?個服務會分為開發環境, 測試環境和?產環境.
1. 開發環境:開發?員?于開發的服務器, 是最基礎的環境. ?般?志級別設置較低, 可能會開啟?些調試信息.
2. 測試環境:測試?員?來進?測試的服務器, 是開發環境到?產環境的過渡環境.
3. ?產環境:正式提供對外服務的環境, 通常關掉調試信息.
通常情況下, 這?個環境是不能互相通信的. Nacos提供了namespace(命名空間)來實現環境的隔離. 不同的namaspace的服務不可?。
創建namespace
默認情況下,所有服務都在同?個namespace,名為public.


配置namespace
namespace創建完成后, 對服務進?配置
配置項 | Key | 默認值 | 說明 |
命名空間 | spring.cloud.nacos.discovery.namespace | 無 | 常用場景之一是不同環境的注冊的區分是隔離的,例如開發測試環境和生產環境的資源(如配置,服務)隔離等。 |
修改order-service的命名空間
spring:cloud:nacos:discovery:namespace: 29e05465-894c-48dc-8ed9-37e6a6a0eed9
此時訪問會失敗,因為order-service和product-service不在同一個命名空間中。
修改product-service的命名空間
spring:cloud:nacos:discovery:namespace: 29e05465-894c-48dc-8ed9-37e6a6a0eed9
此時就能夠訪問成功了,因為order-service和product-service在同一個命名空間中。