Dubbo超時和重連機制

dubbo啟動時默認有重試機制和超時機制。
超時機制的規(guī)則是如果在一定的時間內(nèi),provider沒有返回,則認為本次調(diào)用失敗,
重試機制在出現(xiàn)調(diào)用失敗時,會再次調(diào)用。如果在配置的調(diào)用次數(shù)內(nèi)都失敗,則認為此次請求異常,拋出異常。

如果出現(xiàn)超時,通常是業(yè)務(wù)處理太慢,可在服務(wù)提供方執(zhí)行:jstack PID > jstack.log 分析線程都卡在哪個方法調(diào)用上,這里就是慢的原因。
如果不能調(diào)優(yōu)性能,請將timeout設(shè)大。

某些業(yè)務(wù)場景下,如果不注意配置超時和重試,可能會引起一些異常。

  1. 超時設(shè)置
    DUBBO消費端設(shè)置超時時間需要根據(jù)業(yè)務(wù)實際情況來設(shè)定,
    如果設(shè)置的時間太短,一些復(fù)雜業(yè)務(wù)需要很長時間完成,導(dǎo)致在設(shè)定的超時時間內(nèi)無法完成正常的業(yè)務(wù)處理。
    這樣消費端達到超時時間,那么dubbo會進行重試機制,不合理的重試在一些特殊的業(yè)務(wù)場景下可能會引發(fā)很多問題,需要合理設(shè)置接口超時時間。
    比如發(fā)送郵件,可能就會發(fā)出多份重復(fù)郵件,執(zhí)行注冊請求時,就會插入多條重復(fù)的注冊數(shù)據(jù)。
    1. 合理配置超時和重連的思路

      1. 對于核心的服務(wù)中心,去除dubbo超時重試機制,并重新評估設(shè)置超時時間.

      2.業(yè)務(wù)處理代碼必須放在服務(wù)端,客戶端只做參數(shù)驗證和服務(wù)調(diào)用,不涉及業(yè)務(wù)流程處理

      Dubbo超時和重連配置示例

    <!-- 服務(wù)調(diào)用超時設(shè)置為5秒,超時不重試--> 
    <dubbo:service interface="com.provider.service.DemoService"  ref="demoService"  retries="0" timeout="5000"/>
    
  2. 重連機制
    dubbo在調(diào)用服務(wù)不成功時,默認會重試2次。
    Dubbo的路由機制,會把超時的請求路由到其他機器上,而不是本機嘗試,所以 dubbo的重試機器也能一定程度的保證服務(wù)的質(zhì)量。
    但是如果不合理的配置重試次數(shù),當(dāng)失敗時會進行重試多次,這樣在某個時間點出現(xiàn)性能問題,調(diào)用方再連續(xù)重復(fù)調(diào)用,
    系統(tǒng)請求變?yōu)檎V档膔etries倍,系統(tǒng)壓力會大增,容易引起服務(wù)雪崩,需要根據(jù)業(yè)務(wù)情況規(guī)劃好如何進行異常處理,何時進行重試。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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