通俗易懂的 Dubbo 教程(三):屬性加載順序與啓動時檢查

前言

本文將介紹 Dubbo 的兩個重要功能:屬性加載順序與啓動時檢查。

屬性加載順序

覆蓋策略

在應用啓動階段,Dubbo 會如何讀取配置呢?舉個例子,我們知道 Dubbo 支持多層級的配置,並會按預定優先級自動實現配置間的覆蓋,那麼假如我們在通過虛擬機參數對 Dubbo 進行配置的同時,又通過本地配置文件 dubbo.properties 配置,到底會優先採取哪一種配置呢?這個是 Dubbo 的屬性加載順序需要解決的問題。

Dubbo 支持四種配置來源,分別如下:

  1. JVM 虛擬機參數的配置方式,通過 -D 參數進行配置
  2. 通過 dubbo.xml (等同於 Spring Boot 中的 application.properties/application.yml)的方式進行配置,也就是外部化配置
  3. 通過編程接口進行相應的配置
  4. 通過本地配置文件 dubbo.properties 來進行配置

Dubbo 官方文檔的圖也展示了這四種配置來源的優先級,從上到下,優先級是依次降低的。
在這裏插入圖片描述

總結

若有 JVM 虛擬機參數傳入,以虛擬機參數爲優先,否則以自定義的 dubbo.xml 文件優先,若 dubbo.xml 沒有定義相關的屬性,以編程接口爲優先,最後,若前面都沒有進行相應的定義,以本地配置文件 dubbo.properties 爲準。

配置方式
  1. 我們可以將公共配置,例如應用程序名字,註冊中心地址之類的。配置在本地配置文件 dubbo.properties 中
  2. 將需要額外改變的配置,配置在自定義的 dubbo.xml 配置文件中
  3. 將需要臨時改變的配置,在啓動時通過傳入 JVM 虛擬機參數進行配置

啓動時檢查

什麼是啓動時檢查

Dubbo 在啓動時會檢查依賴的服務是否可用,如果不可用,會拋出異常,所以默認啓動時檢查設置爲 true。

我們也可以通過設置啓動時檢查爲 false 來關閉檢查,適用的場景爲對某些服務不關心,以及出現循環依賴需要有一方先啓動的場景。

另外,如果 Spring 容器是懶加載的,或者通過 API 編程延遲引用服務,請關閉 check,否則服務臨時不可用時,會拋出異常,拿到 null 引用,如果啓動時檢查爲 false,總是會返回引用,當服務恢復時,能自動連上。

測試

我們只啓動消費者,不啓動提供者,由於啓動時檢查默認爲 true,消費者啓動時發現依賴的服務不可用,會拋出異常。測試如下:
在這裏插入圖片描述
我們將啓動時檢查設置爲 false,在配置文件中添加如下配置:

#關閉所有服務的啓動時檢查
dubbo.consumer.check=false

然後我們重新啓動消費者,發現這次在啓動時不會拋出異常了。

在這裏插入圖片描述
然後我們遠程調用提供者提供的方法,發現在調用的時候纔會拋出異常。
在這裏插入圖片描述
在這裏插入圖片描述
除了關閉所有服務的啓動時檢查,我們還可以關閉註冊中心啓動時檢查以及關閉某個服務的啓動時檢查,具體配置可以參考官方文檔。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章