天天看點

Dubbo 學習(5)— 啟動時檢查

Dubbo 預設會在啟動時檢查依賴的服務是否可用,不可用時會抛出異常,阻止 Spring 初始化完成,以便上線時,能及早發現問題,預設

check="true"

可以通過

check="false"

關閉檢查,比如,測試時,有些服務不關心,或者出現了循環依賴,必須有一方先啟動。

另外,如果你的 Spring 容器是懶加載的,或者通過 API 程式設計延遲引用服務,請關閉 check,否則服務臨時不可用時,會抛出異常,拿到 null 引用,如果

check="false"

,總是會傳回引用,當服務恢複時,能自動連上。

示例

源碼位址:https://gitee.com/liupeifeng3514/DubboLearning

通過 spring 配置檔案

關閉某個服務的啟動時檢查 (沒有提供者時報錯):

<dubbo:reference interface="com.foo.BarService" check="false" />
           

關閉所有服務的啟動時檢查 (沒有提供者時報錯):

<dubbo:consumer check="false" />
           

關閉注冊中心啟動時檢查 (注冊訂閱失敗時報錯):

<dubbo:registry check="false" />
           

通過 dubbo.properties

dubbo.reference.com.foo.BarService.check=false
dubbo.reference.check=false
dubbo.consumer.check=false
dubbo.registry.check=false
           

通過 -D 參數

java -Ddubbo.reference.com.foo.BarService.check=false
java -Ddubbo.reference.check=false
java -Ddubbo.consumer.check=false 
java -Ddubbo.registry.check=false
           

配置的含義

dubbo.reference.check=false

,強制改變所有 reference 的 check 值,就算配置中有聲明,也會被覆寫。

dubbo.consumer.check=false

,是設定 check 的預設值,如果配置中有顯式的聲明,如:

<dubbo:reference check="true"/>

,不會受影響。

dubbo.registry.check=false

,前面兩個都是指訂閱成功,但提供者清單是否為空是否報錯,如果注冊訂閱失敗時,也允許啟動,需使用此選項,将在背景定時重試。

繼續閱讀