nacos安裝
- 下載安裝包
官方下載地址 - 修改配置
配置檔案:{nacos_home}/conf/application.properties
# 指定埠號
server.port=8848
# 指定資料庫型別
spring.datasource.platform=mysql
# 資料庫初始化使用指令碼
spring.sql.init.platform=mysql
# 資料庫數量
db.num=1
# 資料庫相關連線配置
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&serverTimezone=UTC
db.user=your_login_name
db.password=your_login_password
# 開啟許可權校驗,開啟後登陸nacos服務端或客戶端使用時都需要使用賬號和密碼
nacos.core.auth.enabled=true
# 叢集相關身份認證,使用叢集事,個單元服務的身份認證資訊需要一致
nacos.core.auth.server.identity.key=your_key
nacos.core.auth.server.identity.value=your_value
- 初始化資料庫
在資料庫中執行如下sql指令碼,{nacos_home}/conf/[derby-schema.sql | mysql-schema.sql],根據不同的資料庫選擇不同的指令碼檔案。 - 啟動服務
bash startup.sh -m standalone
若為雲伺服器,需要同時開啟8848和9848埠;8848為配置檔案中指定的nacos-server訪問埠,9848為客戶端與服務端的通訊埠,在nacos-server訪問埠的基礎上+1000。
nacos註冊中心
nacos提供了註冊中心的基本功能,包含服務註冊、健康監測、動態 DNS 服務以及服務生命週期管理等功能。
基本概念
- 名稱空間
名稱空間是nacos中的最大邏輯分組,需要在Nacos服務端建立,實際專案中可按照不同的執行環境prod、uat、sit、dev分為不同的名稱空間;Nacos會為名稱空間生成一個唯一的DataID,當客戶端或服務分配許可權關聯名稱空間是都使用DataID關聯。 - 分組
客戶端定義的業務分組,實際專案中可以將相似業務模組的所有服務放在同一個業務分組;如後端交易業務可設定為交易分組,交易分組中可包含客戶、產品、訂單服務;分組用於業務隔離。 - 服務名稱
分散式架構中的單應用服務名稱,同一服務的名稱為叢集。 - 服務註冊中心
儲存服務例項和服務負載均衡策略的資料庫。 - 權重
例項級別的配置。權重為浮點數。權重越大,分配給該例項的流量越大。 - 健康檢查
以指定方式檢查服務下掛載的例項 (Instance) 的健康度,從而確認該例項 (Instance) 是否能提供服務。根據檢查結果,例項 (Instance) 會被判斷為健康或不健康。對服務發起解析請求時,不健康的例項 (Instance) 不會返回給客戶端。 - 健康保護閾值
為了防止因過多例項 (Instance) 不健康導致流量全部流向健康例項 (Instance) ,繼而造成流量壓力把健康例項 (Instance) 壓垮並形成雪崩效應,應將健康保護閾值定義為一個 0 到 1 之間的浮點數。當域名健康例項數 (Instance) 佔總服務例項數 (Instance) 的比例小於該值時,無論例項 (Instance) 是否健康,都會將這個例項 (Instance) 返回給客戶端。這樣做雖然損失了一部分流量,但是保證了叢集中剩餘健康例項 (Instance) 能正常工作。
使用
- 依賴新增
implementation("com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery:${nacosVersion}")
- 配置
Spring Boot專案中的application.yml
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
service: ${spring.application.name}
namespace: 33da2973-26a9-429e-93c1-19e37d1d163f
group: fund-trade
username: fund_trade_nacos_dev
password: ENC(qJJ4qlt9rEmdx1HrKjDXHJysZTm7XS9XSnGr848caZ83IdTzeyV/+w==)
nacos配置管理
Nacos提供配置管理功能,提供統一的配置平臺,用於對應用配置做動態更新、版本迭代。實際專案中如Redis、Fastftp、Seata、Mysql等相關通用配置,可在Nacos配置中心中統一做配置管理。
Nacos配置管理同時提供了配置熱更新的功能,避免了修改配置檔案後需要重啟應用服務才能生效的問題。(需要使用@RefreshScope)。
使用
- 依賴新增
implementation("com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-config:${nacosVersion}")
- 配置修改
Spring Boot專案中的application.yml
spring:
application:
name: trade-server
profiles:
active: dev
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yaml
namespace: 33da2973-26a9-429e-93c1-19e37d1d163f
group: fund-trade
username: fund_trade_nacos_dev
password: fund_trade_nacos_dev@123
# spring boot:3.x中有相容問題,需要開啟
import-check:
enabled: false
config:
import:
### 指定對映的Nacos配置管理中的配置檔名稱,當前示例為:trade-server-dev.yaml。除名稱外,還需要與當前配置檔案的namespace、group一致
- optional:nacos:${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
- optional:nacos:${spring.application.name}-common.properties
- 在Nacos配置管理中建立配置檔案
注意配置檔案所屬名稱空間、分組和檔名,示例對應檔案如下圖:
- 開啟配置自動更新
在需要使用自動更新的Bean類上使用@RefreshScope註解,則Bean中使用到了配置檔案中的屬性會響應配置檔案的更新。
@Component
@RefreshScope
public class TradeController {
@Value("${test.prop.name}")
private String testName;
}
如上述示例中的testName,當配置檔案中的test.prop.name屬性變更時,程式中的testName值會自動更新。