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
|
注意區別
|
引用預設是延遲初始化的,只有引用被注入到其它Bean,或被getBean()獲取,才會初始化。
如果需要飢餓載入,即沒有人引用也立即生成動態代理,可以配置:
< dubbo:reference
interface = "com.foo.BarService"
init = "true"
/>
|