Nacos註冊中心+配置管理

周仙僧發表於2024-03-31

nacos安裝

  1. 下載安裝包
    官方下載地址
  2. 修改配置
    配置檔案:{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
  1. 初始化資料庫
    在資料庫中執行如下sql指令碼,{nacos_home}/conf/[derby-schema.sql | mysql-schema.sql],根據不同的資料庫選擇不同的指令碼檔案。
  2. 啟動服務
bash startup.sh -m standalone

若為雲伺服器,需要同時開啟8848和9848埠;8848為配置檔案中指定的nacos-server訪問埠,9848為客戶端與服務端的通訊埠,在nacos-server訪問埠的基礎上+1000。

nacos註冊中心

nacos提供了註冊中心的基本功能,包含服務註冊、健康監測、動態 DNS 服務以及服務生命週期管理等功能。

基本概念

  1. 名稱空間
    名稱空間是nacos中的最大邏輯分組,需要在Nacos服務端建立,實際專案中可按照不同的執行環境prod、uat、sit、dev分為不同的名稱空間;Nacos會為名稱空間生成一個唯一的DataID,當客戶端或服務分配許可權關聯名稱空間是都使用DataID關聯。
  2. 分組
    客戶端定義的業務分組,實際專案中可以將相似業務模組的所有服務放在同一個業務分組;如後端交易業務可設定為交易分組,交易分組中可包含客戶、產品、訂單服務;分組用於業務隔離。
  3. 服務名稱
    分散式架構中的單應用服務名稱,同一服務的名稱為叢集。
  4. 服務註冊中心
    儲存服務例項和服務負載均衡策略的資料庫。
  5. 權重
    例項級別的配置。權重為浮點數。權重越大,分配給該例項的流量越大。
  6. 健康檢查
    以指定方式檢查服務下掛載的例項 (Instance) 的健康度,從而確認該例項 (Instance) 是否能提供服務。根據檢查結果,例項 (Instance) 會被判斷為健康或不健康。對服務發起解析請求時,不健康的例項 (Instance) 不會返回給客戶端。
  7. 健康保護閾值
    為了防止因過多例項 (Instance) 不健康導致流量全部流向健康例項 (Instance) ,繼而造成流量壓力把健康例項 (Instance) 壓垮並形成雪崩效應,應將健康保護閾值定義為一個 0 到 1 之間的浮點數。當域名健康例項數 (Instance) 佔總服務例項數 (Instance) 的比例小於該值時,無論例項 (Instance) 是否健康,都會將這個例項 (Instance) 返回給客戶端。這樣做雖然損失了一部分流量,但是保證了叢集中剩餘健康例項 (Instance) 能正常工作。

使用

  1. 依賴新增
implementation("com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery:${nacosVersion}")
  1. 配置
    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)。

使用

  1. 依賴新增
implementation("com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-config:${nacosVersion}")
  1. 配置修改
    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
  1. 在Nacos配置管理中建立配置檔案
    注意配置檔案所屬名稱空間、分組和檔名,示例對應檔案如下圖:
    image
  2. 開啟配置自動更新
    在需要使用自動更新的Bean類上使用@RefreshScope註解,則Bean中使用到了配置檔案中的屬性會響應配置檔案的更新。
@Component
@RefreshScope
public class TradeController {

    @Value("${test.prop.name}")
    private String testName;
}

如上述示例中的testName,當配置檔案中的test.prop.name屬性變更時,程式中的testName值會自動更新。

相關文章