設定總覽

Dubbo 配置的總體設計和工作原理概述,包括配置組件、配置源、配置方法和配置加載過程。

通過以下鏈接快速跳轉到您關心的內容

配置組件

為了更好地管理各種配置,Dubbo 抽象了一組結構化的配置組件。每個組件通常按用途劃分,並控制不同範圍的行為。

dubbo-config

組件名稱描述範圍必要性
application指定應用程序級別的信息,例如應用程序名稱一個應用程序中只允許有一個 application必要性
service將一個普通的接口或實現類聲明為 Dubbo 服務一個應用程序中可以有 0 個或多個服務至少一個 service/reference
reference將一個普通的接口聲明為 Dubbo 服務一個應用程序中可以有 0 個或多個 reference至少一個 service/reference
protocol要暴露的 RPC 協議以及相關配置,例如端口號等一個應用程序可以配置多個 protocol,一個 protocol 可以用於一組 service&reference可選,默認為 dubbo
registry註冊中心類型、地址和相關配置一個應用程序中可以進行多個配置,一個 registry 可以應用於一組 service&reference必要
config-center配置中心類型、地址和相關配置一個應用程序中可以進行多個配置,所有服務共享可選
metadata-report元數據中心類型、地址和相關配置一個應用程序中可以進行多個配置,所有服務共享可選
consumerreference 之間共享的默認配置一個應用程序中可以配置多個 consumer,一個 consumer 可以作用於一組 reference可選
provider服務之間共用的預設設定 (服務之間共用的預設配置)一個應用程式中可以設定多個配置,並且可以將一個提供者用於一組服務 (一個應用程式中可以配置多個設定,並且可以將一個提供者用於一組服務)可選
監控 (監控)監控系統類型和地址 (監控系統類型和位址)一個應用程式中只能設定一個 (一個應用程式中只能配置一個)可選
指標 (Metrics)數據採集模組的相關設定 (資料採集模組的相關配置)一個應用程式中只允許一個設定 (一個應用程式中只允許一個配置)可選
SSL (SSL)ssl/tls 安全連結相關的憑證設定 (ssl/tls 安全連線相關的憑證配置)一個應用程式中只允許一個設定 (一個應用程式中只允許一個配置)可選
方法 (方法)指定方法級別的設定 (指定方法層級的配置)服務和引用的子設定 (服務和參考的子配置)可選
參數 (參數)方法的參數設定 (方法的參數配置)方法的子設定 (方法的子配置)可選
  1. 從實現原理的角度來看,Dubbo 的所有設定項最終都會組裝成 URL,並以 URL 作為載體在後續的啟動和 RPC 呼叫過程中傳遞,從而控制框架的行為。更多資訊,請參考 Dubbo 源碼分析系列文件或 [部落格](/zh-cn/blog/2019/10/17/dubbo-in-url-unified model/#rpc call)。(從實作原理的角度來看,Dubbo 的所有設定項最終都會組裝成 URL,並以 URL 作為載體在後續的啟動和 RPC 呼叫過程中傳遞,從而控制框架的行為。更多資訊,請參考 Dubbo 原始碼分析系列文件或 [部落格](/zh-cn/blog/2019/10/17/dubbo-in-url-unified model/#rpc 呼叫)。)
  2. 關於每個組件支援的具體設定項及其含義,請參考 設定項手冊 (配置項手冊)

服務和引用 (服務和參考)

servicereference 是 Dubbo 最基本的兩個設定項,它們用於將指定的介面或實現類註冊為 Dubbo 服務,並通過設定項控制服務的行為。(servicereference 是 Dubbo 最基本的兩個設定項,它們用於將指定的介面或實作類註冊為 Dubbo 服務,並透過設定項控制服務的行為。)

  • service 用於服務提供者端,由 service 設定的介面和實現類將被定義為標準的 Dubbo 服務,從而提供對外的 RPC 請求服務。(service 用於服務提供者端,由 service 配置的介面和實作類將被定義為標準的 Dubbo 服務,從而提供對外的 RPC 請求服務。)
  • reference 用於服務消費者,由 reference 設定的介面將被定義為標準的 Dubbo 服務,生成的代理可以向遠端發起 RPC 請求。(reference 用於服務消費者,由 reference 配置的介面將被定義為標準的 Dubbo 服務,產生的代理可以向遠端發起 RPC 請求。)

一個應用程式中可以設定任意數量的 servicereference。(一個應用程式中可以配置任意數量的 servicereference。)

消費者和提供者 (消費者和提供者)

  • 當應用程式中存在多個 reference 設定時,consumer 指定這些 reference 共用的預設值,例如共用的逾時時間等,以簡化繁瑣的設定,例如在某個 reference 中單獨設定了設定項值,則該 reference 中的設定優先。(當應用程式中存在多個 reference 配置時,consumer 指定這些 reference 共用的預設值,例如共用的逾時時間等,以簡化繁瑣的配置,例如在某個 reference 中單獨設定了配置項值,則該 reference 中的配置優先。)
  • 當應用程式中存在多個 service 設定時,provider 指定這些 service 共用的預設值,如果在某個 service 中單獨設定了設定項值,則該 service 中的設定優先順序更高。(當應用程式中存在多個 service 配置時,provider 指定這些 service 共用的預設值,如果在某個 service 中單獨設定了配置項值,則該 service 中的配置優先順序更高。)

consumer 組件也可以對 reference 進行虛擬分組,不同組下的 reference 可以有不同的 consumer 預設值設定;例如在 XML 格式設定中,<dubbo:reference /> 標籤可以嵌套在 <dubbo:consumer /> 標籤內實現分組。provider 和 service 之間也可以達到同樣的效果。(consumer 組件也可以對 reference 進行虛擬分組,不同組下的 reference 可以有不同的 consumer 預設值設定;例如在 XML 格式配置中,<dubbo:reference /> 標籤可以嵌套在 <dubbo:consumer /> 標籤內實作分組。provider 和 service 之間也可以達到同樣的效果。)

設定方法 (配置方法)

根據驅動模式,可以分為以下五種模式 (根據驅動模式,可以分為以下五種模式)

API 設定 (API 配置)

以 Java 編碼的形式組織設定,包含 Raw API 和 Bootstrap API。詳情請參考 API 設定 (API 配置)

public static void main(String[] args) throws IOException {
        ServiceConfig<GreetingsService> service = new ServiceConfig<>();
        service.setApplication(new ApplicationConfig("first-dubbo-provider"));
        service.setRegistry(new RegistryConfig("multicast://224.5.6.7:1234"));
        service.setInterface(GreetingsService.class);
        service.setRef(new GreetingsServiceImpl());
        service. export();
        System.out.println("first-dubbo-provider is running.");
        System.in.read();
}

XML 設定 (XML 配置)

以 XML 方式設定各個組件,支援與 Spring 無縫整合。詳情請參考 XML 設定 (XML 配置)

  <!-- dubbo-provier.xml -->

  <dubbo:application name="demo-provider"/>
  <dubbo:config-center address="zookeeper://127.0.0.1:2181"/>

  <dubbo:registry address="zookeeper://127.0.0.1:2181" simplified="true"/>
  <dubbo:metadata-report address="redis://127.0.0.1:6379"/>
  <dubbo:protocol name="dubbo" port="20880"/>

  <bean id="demoService" class="org.apache.dubbo.samples.basic.impl.DemoServiceImpl"/>
  <dubbo:service interface="org.apache.dubbo.samples.basic.api.DemoService" ref="demoService"/>

註解設定 (註釋配置)

以註解的形式暴露服務和引用服務介面,支援與 Spring 無縫整合。詳情請參考 註解設定 (註釋配置)

  // AnnotationService service implementation

  @DubboService
  public class AnnotationServiceImpl implements AnnotationService {
      @Override
      public String sayHello(String name) {
          System.out.println("async provider received: " + name);
          return "annotation: hello, " + name;
      }
  }
## dubbo.properties

dubbo.application.name=annotation-provider
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880

Spring Boot (Spring Boot)

使用 Spring Boot 減少不必要的設定,並結合 Annotation 和 application.properties/application.yml 開發 Dubbo 應用程式。詳情請參考 註解設定 (註釋配置)

## application.properties

# Spring boot application
spring.application.name=dubbo-externalized-configuration-provider-sample

# Base packages to scan Dubbo Component: @com.alibaba.dubbo.config.annotation.Service
dubbo.scan.base-packages=com.alibaba.boot.dubbo.demo.provider.service

# Dubbo Application
## The default value of dubbo.application.name is ${spring.application.name}
## dubbo.application.name=${spring.application.name}

#Dubbo Protocol
dubbo.protocol.name=dubbo
dubbo.protocol.port=12345

## Dubbo Registry
dubbo.registry.address=N/A

## DemoService version
demo.service.version=1.0.0

屬性設定 (屬性配置)

根據鍵值對生成設定組件,類似於 SpringBoot 的 ConfigurationProperties,詳情請參考屬性設定

屬性設定的另一個重要特性是[屬性覆蓋](../principle/#32-property override),它會使用外部屬性的值覆蓋已建立的設定組件屬性。

如果要將屬性設定放置在外部設定中心,請參考[外部化設定](../principle/#33-Externalized Configuration)。

除了周邊驅動方式的差異外,Dubbo 的設定讀取通常遵循以下原則:

  1. Dubbo 支援多層級設定,並根據預定的優先順序自動實現設定之間的覆蓋。最後,所有設定都會彙總到數據匯流排 URL 中,以驅動後續的服務暴露、引用等流程。
  2. 設定格式主要為 Properties,設定內容遵循約定的基於路徑的path-based[命名規範](../principle/#1-configuration format)。

設定載入流程

設定規範和來源

Dubbo 遵循基於路徑的設定規範,每個設定組件都可以用這種方式表示。在設定來源方面,總共支援 6 個設定來源,也就是說,Dubbo 將嘗試從以下位置載入設定數據:

  • JVM 系統屬性,JVM -D 參數
  • 系統環境變數,JVM 程序的環境變數
  • 外部化設定,[外部化設定](../principle/#33-externalized configuration),從設定中心讀取
  • 應用程式設定,應用程式屬性設定,從 Spring 應用程式環境中提取以「dubbo」開頭的屬性集
  • 透過 API/XML/註釋等程式設計介面收集的設定,可以理解為一種設定來源,是直接面向使用者程式設計的設定收集方法
  • 從 classpath 讀取設定檔 dubbo.properties

上次修改時間:2023 年 2 月 9 日:更新 docsy 至 0.6.0 (#2141) (20081578326)