<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          關(guān)于springcloud中Feign和ribbon設(shè)置超時時間和重試機(jī)制的記錄

          共 1545字,需瀏覽 4分鐘

           ·

          2021-09-10 19:24

          一、 Feign設(shè)置超時時間
          使用Feign調(diào)用接口分兩層,ribbon的調(diào)用和hystrix的調(diào)用,所以ribbon的超時時間和Hystrix的超時時間的結(jié)合就是Feign的超時時間

          #hystrix的超時時間hystrix:    command:        default:            execution:              timeout:                enabled: true              isolation:                    thread:                        timeoutInMilliseconds: 9000#ribbon的超時時間ribbon:  ReadTimeout: 3000  ConnectTimeout: 3000

          一般情況下,都是 ribbon 的超時時間(<)hystrix的超時時間(因?yàn)樯婕暗絩ibbon的重試機(jī)制)。因?yàn)閞ibbon的重試機(jī)制和Feign的重試機(jī)制有沖突,所以源碼中默認(rèn)關(guān)閉Feign的重試機(jī)制,源碼如下:

          195e8324d5b1309c6589c7e373d12d55.webp

          要開啟Feign的重試機(jī)制如下:(Feign默認(rèn)重試五次 源碼中有)

          @BeanRetryer feignRetryer() {        return  new Retryer.Default();}

          ??二、ribbon的重試機(jī)制
          設(shè)置重試次數(shù):

          ribbon:  ReadTimeout: 3000  ConnectTimeout: 3000  MaxAutoRetries: 1 #同一臺實(shí)例最大重試次數(shù),不包括首次調(diào)用  MaxAutoRetriesNextServer: 1 #重試負(fù)載均衡其他的實(shí)例最大重試次數(shù),不包括首次調(diào)用  OkToRetryOnAllOperations: false  #是否所有操作都重試

          根據(jù)上面的參數(shù)計(jì)算重試的次數(shù):MaxAutoRetries+MaxAutoRetriesNextServer+(MaxAutoRetries *MaxAutoRetriesNextServer) 即重試3次 則一共產(chǎn)生4次調(diào)用

          如果在重試期間,時間超過了hystrix的超時時間,便會立即執(zhí)行熔斷,fallback。所以要根據(jù)上面配置的參數(shù)計(jì)算hystrix的超時時間,使得在重試期間不能達(dá)到hystrix的超時時間,不然重試機(jī)制就會沒有意義。

          hystrix超時時間的計(jì)算:(1 + MaxAutoRetries + MaxAutoRetriesNextServer) * ReadTimeout 即按照以上的配置 hystrix的超時時間應(yīng)該配置為(1+1+1)*3=9秒。

          當(dāng)ribbon超時后且hystrix沒有超時,便會采取重試機(jī)制。當(dāng)OkToRetryOnAllOperations設(shè)置為false時,只會對get請求進(jìn)行重試。如果設(shè)置為true,便會對所有的請求進(jìn)行重試,如果是put或post等寫操作,如果服務(wù)器接口沒做冪等性,會產(chǎn)生不好的結(jié)果,所以O(shè)kToRetryOnAllOperations慎用。


          如果不配置ribbon的重試次數(shù),默認(rèn)會重試一次。


          注意:

          默認(rèn)情況下,GET方式請求無論是連接異常還是讀取異常,都會進(jìn)行重試。

          非GET方式請求,只有連接異常時,才會進(jìn)行重試。


          社區(qū)鏈接:http://docs.springcloud.cn/user-guide/ribbon/

          CSDN鏈接:https://blog.csdn.net/east123321/article/details/82385816


          瀏覽 123
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  经典无码一区二区三区 | 黄色在线观看有限公司jb啊啊相当到位 | 中文无码综合网 | 国产毛片A级久久久久久 | 免费一级a |