1. 程式人生 > >Dubbo服務叢集容錯配置(四)

Dubbo服務叢集容錯配置(四)

官網使用者指南:http://dubbo.io/User+Guide-zh.htm

1.Dubbo服務叢集部署

以簡易版支付系統中的部分服務為例:

使用者服務:pay-service-user 交易服務:pay-service-trade

2.Dubbo服務叢集容錯配置--叢集容錯模式:

標籤:<dubbo:service>、<dubbo:reference>、 <dubbo:consumer>、<dubbo:provider>屬性:cluster 型別:string

是否必填:可選

預設值:failover

作用:效能調優

叢集方式:可選:failover/failfast/failsafe/failback/forking

相容性:2.0.5以上版本

1、Failover Cluster :失敗自動切換

失敗自動切換,當出現失敗,重試其它伺服器。(預設) 通常用於讀操作,但重試會帶來更長延遲。可通過retries="2"來設定重試次數(不含第一次)。

<dubbo:service retries="2" /> 或:

<dubbo:referenceretries="2" />

或:

<dubbo:reference>

<dubbo:methodname="findFoo" retries="2" /> </dubbo:reference>

2、Failfas tCluster:快速失敗

快速失敗,只發起一次呼叫,失敗立即報錯。

通常用於非冪等性的寫操作,比如新增記錄。

<dubbo:service cluster="failfast" /> 或:

<dubbo:referencecluster="failfast" />

3、Failsafe Cluster:失敗安全

失敗安全,出現異常時,直接忽略。

通常用於寫入審計日誌等操作。

<dubbo:service cluster="failsafe" /> 或:

<dubbo:referencecluster="failsafe" />

4、FailbackCluster:失敗自動恢復

失敗自動恢復,後臺記錄失敗請求,定時重發。通常用於訊息通知操作。

<dubbo:service cluster="failback" /> 或:

<dubbo:referencecluster="failback" />

5、ForkingCluster:並行呼叫

並行呼叫多個伺服器,只要一個成功即返回。

通常用於實時性要求較高的讀操作,但需要浪費更多服務資源。可通過forks="2"來設定最大並行數。

<dubbo:servicecluster=“forking" />

或:

<dubbo:referencecluster=“forking" />

Dubbo服務叢集容錯配置--叢集容錯模式:策略成熟度

3.啟動時檢查

Dubbo預設會在啟動時檢查依賴的服務是否可用,不可用時會丟擲異常,阻止Spring初始化完成,以便上線時,能及早發現問題,預設check=true。
如果你的Spring容器是懶載入的,或者通過API程式設計延遲引用服務,請關閉check,否則服務臨時不可用時,會丟擲異常,拿到null引用,如果check=false,總是會返回引用,當服務恢復時,能自動連上。

可以通過check="false"關閉檢查,比如,測試時,有些服務不關心,或者出現了迴圈依賴,必須有一方先啟動。

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

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

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

<dubbo:consumer check="false" />

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

<dubbo:registry check="false" />

也可以用dubbo.properties配置:

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,前面兩個都是指訂閱成功,但提供者列表是否為空是否報錯,如果註冊訂閱失敗時,也允許啟動,需使用此選項,將在後臺定時重試。

引用預設是延遲初始化的,只有引用被注入到其它Bean,或被getBean()獲取,才會初始化。
如果需要飢餓載入,即沒有人引用也立即生成動態代理,可以配置:

<dubbo:reference interface="com.foo.BarService" init="true" />