Nacos

Nacos 註冊中心的基礎用法與工作原理

1 前置條件

當 Dubbo 使用 3.0.0 及以上版本時,需要使用 Nacos 2.0.0 及以上版本。

2 使用說明

在此處查看 完整範例程式碼

2.1 新增依賴

<dependencies>
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo</artifactId>
        <version>3.0.9</version>
    </dependency>
    <dependency>
      <groupId>com.alibaba.nacos</groupId>
      <artifactId>nacos-client</artifactId>
      <version>2.1.0</version>
    </dependency>
     <!-- Introduce Dubbo Nacos extension, or you can add Nacos dependency directly as shown above-->
     <!--
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-registry-nacos</artifactId>
            <version>3.0.9</version>
        </dependency>
     -->
</dependencies>

新增 Dubbo 和 Nacos 依賴

Dubbo 3.0.0 及以上版本需要 nacos-client 2.0.0 及以上版本

2.2 設定並啟用 Nacos

# application.yml (Spring Boot)
dubbo
 registry
   address: nacos://localhost:8848

# dubbo.properties
dubbo.registry.address=nacos://localhost:8848

<dubbo:registry address="nacos://localhost:8848" />

要啟用應用程式,請查看註冊後的樣子或其工作方式,請參閱 [工作原理](#4-工作原理)。

3 進階設定

3.1 驗證

# application.yml (Spring Boot)
dubbo
 registry
   address: nacos://localhost:8848?username=nacos&password=nacos

# dubbo.properties
dubbo.registry.address: nacos://nacos:nacos@localhost:8848

3.2 自訂命名空間

# application.yml (Spring Boot)
dubbo:
 registry:
   address: nacos://localhost:8848?namespace=5cbb70a5-xxx-xxx-xxx-d43479ae0932

# application.yml (Spring Boot)
dubbo:
 registry:
   address: nacos://localhost:8848
   parameters.namespace: 5cbb70a5-xxx-xxx-xxx-d43479ae0932

3.3 自訂分組

# application.yml
dubbo:
 registry:
   address: nacos://localhost:8848
   group: dubbo

如果未設定,則分組由 Nacos 預設指定。分組和命名空間代表 Nacos 中不同的隔離級別。一般來說,命名空間用於隔離不同的使用者或環境,而分組用於在同一環境中進一步對資料進行分組。

3.4 註冊介面級別的消費者

Dubbo 3.0.0 之後,新增了是否註冊消費者的參數。如果需要將消費者註冊到 Nacos 註冊中心,需要將參數 (register-consumer-url) 設定為 true,預設值為 false。

# application.yml
dubbo:
  registry:
    address: nacos://localhost:8848?register-consumer-url=true

# application.yml
dubbo:
  registry:
    address: nacos://localhost:8848
    parameters.register-consumer-url: true
    

3.5 更多設定

參數名稱中文說明預設值
username連線到 Nacos 伺服器的使用者名稱nacos
password連線到 Nacos 伺服器的密碼nacos
backup備用地址null
namespace命名空間 IDpublic
group分組名稱DEFAULT_GROUP
register-consumer-url是否註冊消費者端false
com.alibaba.nacos.naming.log.filename初始化日誌檔案名稱naming.log
endpoint連線到 Nacos 伺服器指定的連接點,請參考 文件
endpointPort連線至 Nacos 伺服器指定的連接點端口,您可以參考文件
endpointQueryParams端點查詢參數查詢null
isUseCloudNamespaceParsing是否解析雲環境中的命名空間參數true
isUseEndpointParsingRule是否啟用端點參數規則解析true
namingLoadCacheAtStart啟動時是否先讀取本地緩存true
namingCacheRegistryDir指定緩存子目錄,位置為 …/nacos/{SUB_DIR}/naming
namingClientBeatThreadCount客戶端心跳線程池大小機器 CPU 數量的一半
namingPollingThreadCount用於數據更新的客戶端定時輪詢線程池大小機器 CPU 數量的一半
namingRequestDomainMaxRetryCount客戶端通過 HTTP 向 Nacos 伺服器請求的重試次數3
namingPushEmptyProtection當服務沒有有效的(健康的)實例時,是否啟用保護,啟用後將使用舊的服務實例false
push.receiver.udp.port客戶端 UDP 的端口null

在 nacos-server@1.0.0 版本之後,支持客戶端通過向伺服器報告一些包含特定元數據的實例來控制實例的一些行為。

參數名稱中文說明預設值
preserved.heart.beat.timeout實例在未發送心跳後從健康狀態變為不健康狀態的時間(以毫秒為單位)15000
preserved.ip.delete.timeout實例在未發送心跳後被伺服器刪除的時間(以毫秒為單位)30000
preserved.heart.beat.interval實例在客戶端上報告心跳的時間間隔(以毫秒為單位)5000
preserved.instance.id.generator此實例的 ID 生成策略,當值為 snowflake 時,它將從 0 開始遞增simple
preserved.register.source註冊實例註冊服務框架類型(例如 Dubbo、Spring Cloud 等)

這些參數可以通過類似於 namespace 的參數擴展方式配置到 Nacos,例如

dubbo.registry.parameters.preserved.heart.beat.timeout=5000

4 工作原理

以下僅以 Nacos 作為 Dubbo 註冊中心的工作原理為例。建議使用Dubbo Admin 進行 Dubbo 服務的運維

4.1 Dubbo2 註冊數據

然後,重新啟動您的 Dubbo 應用程序,Dubbo 的服務提供和消費信息將會顯示在 Nacos 控制台中

dubbo-registry-nacos-1.png

如圖所示,以 providers: 為前綴的服務名稱是服務提供者的元信息,consumers: 代表服務消費者的元信息。點擊“詳情”查看服務狀態詳情

image-dubbo-registry-nacos-2.png

4.2 Dubbo3 註冊數據

應用級服務發現的“服務名稱”是應用程序名稱

Dubbo3 默认采用“应用级服务发现 + 接口级服务发现”的双注册模式,因此您会发现在 Nacos 控制台中会同时出现应用级服务(应用名称)和接口级服务(接口名称),您可以配置 dubbo.registry.register-mode=instance/interface/all 来改变注册行为。


上次修改時間:2023 年 1 月 2 日:增強英文文檔 (#1798) (95a9f4f6c1c)