Dubbo集群容錯是靠配置cluster屬性來做
支持改屬性的標簽為<dubbo:service>,<dubbo:referece>,<dubbo:consumer>,<dubbo:provider>
但是后兩個粒度太粗,一般不采用
該屬性是可選的,默認值是failover
以下是各種可選值及其含義:
1.failover 失敗自動切換 (缺省值)
當出現失敗時,重試其他服務器. 通常用於讀操作, 但切換其他機器重試會帶來更長延遲 .所以可通過retries="2"來設置重試次數 (不含第一次),retries了這么多次之后,如果還是失敗,再返回失敗. 實例: 有5台服務器, 在retries=2的情況下, 消費者調用A機失敗, 接着重試B機, 然后又重試C機, 最后返回失敗. 為了避免長延遲,可以將該值配置為0, 也就是失敗馬上返回,不去嘗試其他機器
為什么說這種方式通常用於讀操作,而不是寫操作. 因為用在寫操作,可能為導致重復寫
<dubbo:service cluster="failback" retries="2"/> 或者 <dubbo:reference cluster="failback" retries="2"/>
2.failfast 快速失敗
只發起一次調用,失敗立即報錯,通常用於非冪等性的寫操作,比如新增記錄
非冪等性的含義是,無論發起多少次請求,最后的結果都是一樣的
3.failsafe
失敗安全,出現異常時,直接忽略。
通常用於寫入審計日志等操作
4.failback
失敗自動恢復, 后台記錄失敗請求, 定時重發, 通常用於消息通知操作
<dubbo:service cluster="failback"/> 或者 <dubbo:reference cluster="failback"/>
一般不用 ,可能監控中心這類應用用
5.forking
並行調用多個服務器,只要一個成功返回,通常用於實時性要求較高的讀操作,但需要浪費更多服務資源
可通過forks="2" 來設置最大並行數
<dubbo:service cluster="forking" forks="2"/> 或者 <dubbo:reference cluster="forking" forks="2"/>
6.broadcast
廣播調用所有提供者,逐個調用,任意一台報錯則報錯。(2.1.0開始支持)
通常用於通知所有提供者更新緩存或日志等本地資源信息。