Ribbon 和 Hystrix超時時間怎么設(shè)置

前提知識:

spring cloud中:

  • zuul 用來轉(zhuǎn)發(fā)請求的
  • ribbon 是用來負(fù)載均衡的
  • hystrix 是用來熔斷的

轉(zhuǎn)發(fā)請求就是一個請求過來为迈,要轉(zhuǎn)發(fā)到具體service中哪個接口上

所謂負(fù)載均衡拾枣,就是相同一個service服務(wù),可以部署多個實例薇溃,如果實例1不能用了菌赖,會自動切換到實例2上,或者很多請求過來了沐序,會均勻分布到多個實例上琉用,而不讓多個請求都在一個實例上執(zhí)行,拉慢效率策幼。

所謂熔斷邑时,比如請求用Feign去請求一個API,長時間請求沒響應(yīng)時特姐,則需要讓該API類似保險絲一樣熔斷晶丘,那么過來的請求就不會去call 該API,給出一個提示錯誤唐含,待API修好之后再重新接上保險絲浅浮,API正常通過。

那么到底ribbon和hystrix捷枯,feignClient怎么協(xié)調(diào)配合呢滚秩?

配置hystirx

統(tǒng)一配置

hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 6000
 
ribbon:
  ReadTimeout: 6000
  ConnectTimeout: 200

以上的配置是說針對所有的feignClient做統(tǒng)一的配置,超時設(shè)置6s淮捆,超過6s熔斷郁油。

配置2: 用具體feignclient的方法名

可以直接在hystirx上指定對應(yīng)的feignClient方法:

@FeignClient(value = "user-client", fallback = .class)
public interface OtherFeignClient{
    @GetMapping("/ids/{id}")
    String getUserById(@PathVariable("id") String id);

    @GetMapping
    String getAllUsers();
}
## 配置:
hystrix:
  command:
    "OtherFeignClient#getUserById(String)":  #針對getUserById
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 5000
    "OtherFeignClient#getAllUsers()":  #針對getAllUser
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 6000

配置3:用feignclient上的id

@FeignClient(value = "user-client", fallback = .class)
public interface OtherFeignClient{
    @GetMapping("/ids/{id}")
    @HystrixCommand(commandKey = "id-getUserById")
    String getUserById(@PathVariable("id") String id);
}
## 配置:
hystrix:
  command:
    id-getUserById:  #針對getUserById
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 5000

配置zuul

zuul的配置分為2種,且不同的方式配置和效果不一樣:

  • url方式配置攀痊,用不上ribbon和hystrix

These simple url-routes don’t get executed as a HystrixCommand nor do they loadbalance multiple URLs with Ribbon. To achieve this, you can specify a serviceId with a static list of servers #from

  • service-id方式配置桐腌,可以用上ribbon和hystrix

用url配置

zuul:
  routes:
    userAPI:
      path: /api-users/**
      url: http://a.com/users
    bookAPI:
      path: /api-books/**
      url: http://a.com/books
  host:
    connect-timeout-millis: 5000
    socket-timeout-millis: 3000

用service-id配置

zuul:
  routes:
    userAPI:
      path: /api-users/**
      url: http://a.com/users
      serviceId: id-get-user # 指定serviceId
 
id-get-user:
  ribbon:
    ConnectTimeout: 5000
    ReadTimeout: 5000

hystrix:
  command:
    id-get-user:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 3000

那么ribbon和hystrix配合起來怎么使用?

!!! hystrix起熔斷作用蚕苇,所以ribbon的各種配置超時時間加起來要小于hystrix的超時配置哩掺,不然ribbon還沒工作完就熔斷了

ribbon:
  ReadTimeout: 5000
  ConnectTimeout: 2000
  MaxAutoRetries: 1 #同一臺實例最大重試次數(shù),不包括首次調(diào)用
  MaxAutoRetriesNextServer: 2 #重試負(fù)載均衡其他的實例最大重試次數(shù),不包括首次調(diào)用
  OkToRetryOnAllOperations: false  #是否所有操作都重試?默認(rèn)get請求起作用,如果想其他類型的請求起作用涩笤,需要配置true嚼吞,但是! post請求一般是create蹬碧,如果接口沒做冪等性會有并發(fā)問題舱禽,所以慎重配置。

問題1:以上配置如果每次請求都掛了恩沽,會請求幾次誊稚?

答案是6次,
1(首次訪問) + 1(MaxAutoRetries一次) + 1 (負(fù)載到實例2之后請求一次) + 1 (實例2重試一次) + 1(負(fù)載到實例3之后請求一次)+ 1(實例3重試一次)= 6次

總結(jié)公式為:

1 + MaxAutoRetries + (MaxAutoRetriesNextServer * (1 + MaxAutoRetries))
首次訪問 + 本次實例重試次數(shù) + (切換實例次數(shù) * (進(jìn)入該實例請求的第一次 + 該實例重試次數(shù)))

問題2:以上為ribbon的請求超時時間,那么hystrix配置多長時間里伯?

(ribbon.ConnectTimeout + ribbon.ReadTimeout) * (ribbon.MaxAutoRetries + 1) * (ribbon.MaxAutoRetriesNextServer + 1) #from
該公式后面的(ribbon.MaxAutoRetries + 1) * (ribbon.MaxAutoRetriesNextServer + 1)即訪問總次數(shù)城瞎,和以上推到的公式最后化簡是一樣的,可用初中數(shù)學(xué)自行推到

總共訪問次數(shù) * (ReadTimeout + connectTimeout)= 6 * (5000+2000) = 42000疾瓮,即42s脖镀。

完。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末狼电,一起剝皮案震驚了整個濱河市蜒灰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌肩碟,老刑警劉巖强窖,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異削祈,居然都是意外死亡翅溺,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進(jìn)店門髓抑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來未巫,“玉大人,你說我怎么就攤上這事启昧。” “怎么了劈伴?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵密末,是天一觀的道長。 經(jīng)常有香客問我跛璧,道長严里,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任追城,我火速辦了婚禮刹碾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘座柱。我一直安慰自己迷帜,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布色洞。 她就那樣靜靜地躺著戏锹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪火诸。 梳的紋絲不亂的頭發(fā)上锦针,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼奈搜。 笑死悉盆,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的馋吗。 我是一名探鬼主播焕盟,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼耗美!你這毒婦竟也來了京髓?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤商架,失蹤者是張志新(化名)和其女友劉穎堰怨,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛇摸,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡备图,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了赶袄。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片揽涮。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖饿肺,靈堂內(nèi)的尸體忽然破棺而出蒋困,到底是詐尸還是另有隱情,我是刑警寧澤敬辣,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布雪标,位于F島的核電站,受9級特大地震影響溉跃,放射性物質(zhì)發(fā)生泄漏村刨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一撰茎、第九天 我趴在偏房一處隱蔽的房頂上張望嵌牺。 院中可真熱鬧,春花似錦龄糊、人聲如沸逆粹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽枯饿。三九已至,卻和暖如春诡必,著一層夾襖步出監(jiān)牢的瞬間奢方,已是汗流浹背搔扁。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留蟋字,地道東北人稿蹲。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像鹊奖,于是被迫代替她去往敵國和親苛聘。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容