配置的原則
dubbo推薦在Provider上盡量多配置Consumer端屬性:
作為服務(wù)的提供者,比服務(wù)方更清楚服務(wù)性能的參數(shù),如調(diào)用時(shí)間,合理的重試次數(shù)等,所以這些參數(shù)應(yīng)盡量配置在服務(wù)的提供者方;
在provider配置后,Consumer不配置則會(huì)使用provider的配置值,即provider的配置會(huì)作為consumer配置的缺省值。如果使用consumer的全局配置,這對(duì)于provider是不可控的,并且是不合理的。
當(dāng)消費(fèi)者請(qǐng)求一個(gè)服務(wù)時(shí)出現(xiàn)錯(cuò)誤,會(huì)重試連接其他的服務(wù)器,但重試會(huì)帶來更多的延遲。重試次數(shù)可以使用【retries=重試次數(shù)】來設(shè)置。
Dubbo的超時(shí)重試機(jī)制為服務(wù)容錯(cuò)、服務(wù)穩(wěn)定提供了比較好的框架支持 dubbo在調(diào)用服務(wù)不成功時(shí),默認(rèn)會(huì)重試2次。Dubbo的路由機(jī)制,會(huì)把超時(shí)的請(qǐng)求路由到其他機(jī)器上,而不是本機(jī)嘗試,所以 dubbo的重試機(jī)器也能一定程度的保證服務(wù)的質(zhì)量。,但是在一些比較特殊的網(wǎng)絡(luò)環(huán)境下(網(wǎng)絡(luò)傳輸慢,并發(fā)多)可能由于服務(wù)響應(yīng)慢,Dubbo自身的超時(shí)重試機(jī)制(服務(wù)端的處理時(shí)間超過了設(shè)定的超時(shí)時(shí)間時(shí),就會(huì)有重復(fù)請(qǐng)求)可能會(huì)帶來一些麻煩。
常見的應(yīng)用場(chǎng)景故障: 1、發(fā)送郵件(重復(fù)) ;2、賬戶注冊(cè)(重復(fù)).。
解決方案:
1.對(duì)于核心的服務(wù)中心,去除dubbo超時(shí)重試機(jī)制,并重新評(píng)估設(shè)置超時(shí)時(shí)間。
(1)、去掉超時(shí)重試機(jī)制 (全局配置)
<dubbo:provider delay="-1" timeout="60000" retries="0"/>
(2)、重新評(píng)估設(shè)置超時(shí)時(shí)間 (全局配置)
<dubbo:service interface="*.*" ref="*" timeout="延長(zhǎng)服務(wù)時(shí)間"/>
2.業(yè)務(wù)處理代碼必須放在服務(wù)端,客戶端只做參數(shù)驗(yàn)證和服務(wù)調(diào)用,不涉及業(yè)務(wù)流程處理。
一. 配置:
配置優(yōu)先順序?yàn)椋合M(fèi)端方法級(jí) > 服務(wù)端方法級(jí) > 消費(fèi)端接口級(jí) > 服務(wù)端接口級(jí) > 消費(fèi)端全局 > 服務(wù)端全局
1). 注解方式:
在提供者中,reties的值設(shè)置在@Service中 默認(rèn)retries=2,timeout=0
@Service(retries = 3,timeout = 3000)
public class XxxServiceImpl implements IXxxService {}
在消費(fèi)者中,reties的值設(shè)置在@Reference中
@Reference(retries = 3,timeout = 3000,check = false)//check 默認(rèn)為true,啟動(dòng)時(shí)檢查服務(wù)是否可用
private xxxService xxxService;
2). xml方式:
- 消費(fèi)端配置:
全局配置
<dubbo:consumer timeout="超時(shí)時(shí)間" retries="重試次數(shù)"></dubbo:consumer>
接口級(jí)配置
<dubbo:reference interface="XXXXXXX" id="XXXXXX" timeout="超時(shí)時(shí)間" retries="重試次數(shù)">
<dubbo:method name="XXXXXX" timeout="3000" retries="2"></dubbo:method>
</dubbo:reference>
方法級(jí)配置
<dubbo:reference interface="XXXXX" id="XXXXX">
<dubbo:method name="XXXXX" timeout="超時(shí)時(shí)間" retries="重試次數(shù)"></dubbo:method>
</dubbo:reference>
- 服務(wù)端配置:
全局配置
<dubbo:provider timeout="超時(shí)時(shí)間" retries="2"></dubbo:provider>
接口級(jí)配置
<dubbo:service interface="XXXXX" ref="XXXXX" timeout="超時(shí)時(shí)間" retries="重試次數(shù)">
<dubbo:method name="XXXXX"></dubbo:method>
</dubbo:service>
方法級(jí)配置
<dubbo:service interface="XXXXXX" ref="XXXXX" >
<dubbo:method name="XXXXX" timeout="超時(shí)時(shí)間" retries="重試次數(shù)"></dubbo:method>
</dubbo:service>
文獻(xiàn):
http://www.itdecent.cn/p/4dc59c2e9930
https://blog.csdn.net/u013938578/article/details/104250807