背景
部署了兩臺服務器,每臺上都有相同的dubbo的提供者。但是發現,A掛了後,請求報錯,不會自動去請求另一臺正常運行的提供者。
處理方法
修改前的dubbo配置(yml):
dubbo:
application:
name: provider-serviceName
registry:
timeout: '60000'
address: zookeeper://ip:2181
username: username
password: password
protocol:
name: dubbo
port: '-1'
monitor:
protocol: registry
consumer:
check: false
修改後配置:
dubbo:
application:
name: provider-serviceName
registry:
timeout: '60000'
address: zookeeper://ip:2181
username: username
password: password
protocol:
name: dubbo
port: '-1'
monitor:
protocol: registry
consumer:
check: false
provider:
timeout: '60000'
#負載均衡策略:加權輪詢
loadbalance: roundrobin
即增加了對提供者的負載均衡配置,負載均衡使用的策略爲加權輪詢。
provider:
timeout: '60000'
#負載均衡策略:加權輪詢
loadbalance: roundrobin
修改後,則可實現,2個privider中某個掛掉後,會自動轉向請求另外一個。
原理
dubbo的負載均衡算法一共有5中,默認是隨機算法:
奇怪的是,我實驗的過程中,某臺提供者掛掉後,始終沒有去請求另一臺,感覺也不隨啊,不知道爲什麼。
本來優先考慮使用一致性hash,但是部署後,仍然沒有自動請求正常運行的提供者。待後面再研究吧。。。