Dubbo超時(shí)重試機(jī)制配置

配置的原則
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方式:

  1. 消費(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>
  1. 服務(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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容