net怎麼接入nacos配置
A. 【Nacos專題】Nacos 快速入門
Nacos 英文全稱 Dynamic Naming and Configuration Service,它是 Spring Cloud Alibaba 的核心組件之一,致力於微服務架構中的服務注冊與發現、配置管理。
Nacos 將注冊中心和配置中心整合在一起,提供了兩個核心功能,即服務注冊與發現和動態配置服務。
Nacos 支持基於 DNS 和 基於 RPC 的服務發現,服務提供者向 Nacos 服務端注冊服務後,服務消費者可以從 Nacos 服務端獲取注冊列表。
提供了一個簡潔易用的 UI,方便用戶管理所有環境的應用配置和服務配置,消除了配置變更時服務需重新部署的過程。還提供了包括 配置版本跟蹤 、 金絲雀發布 、 一鍵回滾配置 以及 客戶端配置更新狀態跟蹤 在內的一系列開箱即用的配置管理特性,大大降低配置變更帶來的風險。
Nacos 分為服務端和客戶端,服務端用來提供服務發現與注冊等功能,客戶端就是不同的應用和服務。
在 Nacos 的 Release Notes 可以看到每個版本的相關介紹。當前最新的穩定版本是 1.4.0。
Nacos 服務需要 java 運行環境,因此,在啟動服務之前需要確保你的伺服器已經有了 Java 運行環境,並且配置好了 JAVA_HOME 。
參數說明:
-m:指定運行模式,standalone 表示單機模式
在 Nacos 配置文件中配置伺服器ip,默認的埠號為8848,默認的用戶名和密碼均為nacos,訪問 http://ip:8848/nacos/index.html 便能夠成功登Nacos管理後台。
(1) 引入依賴
在 SpringBoot 項目中引入 Nacos 客戶端依賴,pom.xml 添加如下內容:
(2) 修改配置
在 application.properties 配置文件中添加 Nacos 的基本配置 (也可以是 application.yml )
1)application.properties
2)application.yml
(3) @EnableDiscoveryClient 註解
在 SpringBoot 的啟動類上添加 @EnableDiscoveryClient 註解來開啟服務注冊。
Nacos Discovery 默認集成了 Netflix Ribbon,服務消費者可以使用 RestTemplate 或 OpenFeign 進行服務的調用。
(1) Nacos 啟動時報如下錯誤
問題原因:通過yum命令安裝的普通的openJDK沒有javac等工具,而且安裝完以後連環境變數都不需要配置,就能使用 java -version 驗證。
解決方案:重新安裝devel開發版openJDK,開發版的openJDK有javac工具,然後配置java環境變數即可。
(2) Nacos Provider 啟動報錯
問題原因:沒有配置 Nacos 服務端的地址,因此,當 Nacos Provider 啟動的時候,無法與注冊中心通信
解決方案:在配置文件中配置 Nacos 服務端地址,如下所示:
B. 什麼是NacosNacos注冊配置中心介紹
英文全稱Dynamic Naming and Configuration Service,Na為naming/nameServer即注冊中心,co為configuration即注冊中心,service是指該注冊/配置中心都是以服務為核心。服務在nacos是一等公民
Nacos注冊中心分為server與client,server採用Java編寫,為client提供注冊發現服務與配置服務。而client可以用多語言實現,client與微服務嵌套在一起,nacos提供sdk和openApi,如果沒有sdk也可以根據openApi手動寫服務注冊與發現和配置拉取的邏輯
Nacos服務領域模型主要分為命名空間、集群、服務。在下圖的分級存儲模型可以看到,在服務級別,保存了健康檢查開關、元數據、路由機制、保護閾值等設置,而集群保存了健康檢查模式、元數據、同步機制等數據,實例保存了該實例的ip、埠、權重、健康檢查狀態、下線狀態、元數據、響應時間。這些數據的作用會在第三章講到
服務注冊方法:以Java nacos client v1.0.1 為例子,服務注冊的策略的是每5秒向nacos server發送一次心跳,心跳帶上了服務名,服務ip,服務埠等信息。同時 nacos server也會向client 主動發起健康檢查,支持tcp/http檢查。如果15秒內無心跳且健康檢查失敗則認為實例不健康,如果30秒內健康檢查失敗則剔除實例。
不同的命名空間邏輯上是隔離的,不特殊設置的情況下,服務不會跨命名空間請求,命名空間主要的作用是區分服務使用的范圍,比如開發、測試、生產、灰度可以分別設置四個命名空間來互相隔離。
以springcloud為例,首先用maven導入nacos clinet的依賴:
先導入springcloud的alibaba-nacos-config和alibaba-nacos-discovery兩個依賴,這兩個依賴是用於nacos clinet與cloud結合的工具,0.2.x對應springboot 2.x.x ,0.1.x對應springboot 1.x.x。這兩個組件可以和各種版本的nacos-client結合。把其中的nacos-clinet依賴給排除,引入想要引入的nacosclinet版本,如下:
在bootstrap.properties上添加配置中心的配置
在application-xxx.properties新增如下配置
如果springboot啟動類沒有 @EnableDiscover 註解則加上
完成如上更改,即可使用Nacos注冊/配置服務
演示:
使用Feign、Ribbon均可,在這不做過多介紹
普通application參數在配置中心直接配置皆可,如果需要可以動態刷新的配置,需要在相應類上加上 @RefreshScope 註解,示例如下,當在nacos配置中心更改配置後,方法getId的值也會刷新。
配置中心參數修改/設置
如下兩張圖:在nacos控制台的 配置管理-配置列表 中頂部選擇相應的命名空間,點擊列表右上角的加號新增配置,Data ID 為 項目名-{spring.profiles.active}.properties,Group如果在bootstrap.properties中不指定則填默認的DEFAULT_GROUP,描述寫該配置的描述,配置內容填寫Properties格式或者Yaml格式。
在控制台的 服務管理-服務列表 選擇一個服務點擊詳情,在下方的集群列表可以看到有上線/下線按鈕,點擊即可以對該實例執行上線/下線操作,下線後的實例不會被請求
可以通過手動配置權重來控制流量,當一個集群內兩個實例,權重越高,到達該實例的請求比例越多。
權重的初始值是1
保護閾值的范圍是0~1
服務的健康比例=服務的健康實例/總實例個數
當服務健康比例<=保護閾值時候,無論實例健不健康都會返回給調用方
當服務健康比例>保護閾值的時候,只會返回健康實例給調用方
在 服務管理-服務列表 選擇一個服務點擊詳情可以配置