設定總覽
通過以下鏈接快速跳轉到您關心的內容
配置組件
為了更好地管理各種配置,Dubbo 抽象了一組結構化的配置組件。每個組件通常按用途劃分,並控制不同範圍的行為。
組件名稱 | 描述 | 範圍 | 必要性 |
---|---|---|---|
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 | 元數據中心類型、地址和相關配置 | 一個應用程序中可以進行多個配置,所有服務共享 | 可選 |
consumer | reference 之間共享的默認配置 | 一個應用程序中可以配置多個 consumer,一個 consumer 可以作用於一組 reference | 可選 |
provider | 服務之間共用的預設設定 (服務之間共用的預設配置) | 一個應用程式中可以設定多個配置,並且可以將一個提供者用於一組服務 (一個應用程式中可以配置多個設定,並且可以將一個提供者用於一組服務) | 可選 |
監控 (監控) | 監控系統類型和地址 (監控系統類型和位址) | 一個應用程式中只能設定一個 (一個應用程式中只能配置一個) | 可選 |
指標 (Metrics) | 數據採集模組的相關設定 (資料採集模組的相關配置) | 一個應用程式中只允許一個設定 (一個應用程式中只允許一個配置) | 可選 |
SSL (SSL) | ssl/tls 安全連結相關的憑證設定 (ssl/tls 安全連線相關的憑證配置) | 一個應用程式中只允許一個設定 (一個應用程式中只允許一個配置) | 可選 |
方法 (方法) | 指定方法級別的設定 (指定方法層級的配置) | 服務和引用的子設定 (服務和參考的子配置) | 可選 |
參數 (參數) | 方法的參數設定 (方法的參數配置) | 方法的子設定 (方法的子配置) | 可選 |
- 從實現原理的角度來看,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 呼叫)。)
- 關於每個組件支援的具體設定項及其含義,請參考 設定項手冊 (配置項手冊)
服務和引用 (服務和參考)
service
和 reference
是 Dubbo 最基本的兩個設定項,它們用於將指定的介面或實現類註冊為 Dubbo 服務,並通過設定項控制服務的行為。(service
和 reference
是 Dubbo 最基本的兩個設定項,它們用於將指定的介面或實作類註冊為 Dubbo 服務,並透過設定項控制服務的行為。)
service
用於服務提供者端,由service
設定的介面和實現類將被定義為標準的 Dubbo 服務,從而提供對外的 RPC 請求服務。(service
用於服務提供者端,由service
配置的介面和實作類將被定義為標準的 Dubbo 服務,從而提供對外的 RPC 請求服務。)reference
用於服務消費者,由reference
設定的介面將被定義為標準的 Dubbo 服務,生成的代理可以向遠端發起 RPC 請求。(reference
用於服務消費者,由reference
配置的介面將被定義為標準的 Dubbo 服務,產生的代理可以向遠端發起 RPC 請求。)
一個應用程式中可以設定任意數量的 service
和 reference
。(一個應用程式中可以配置任意數量的 service
和 reference
。)
消費者和提供者 (消費者和提供者)
- 當應用程式中存在多個
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 的設定讀取通常遵循以下原則:
- Dubbo 支援多層級設定,並根據預定的優先順序自動實現設定之間的覆蓋。最後,所有設定都會彙總到數據匯流排 URL 中,以驅動後續的服務暴露、引用等流程。
- 設定格式主要為 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