Feign柳譬、Ribbon群扶、Hystrix超時(shí)時(shí)間分析與配置

前置說明

關(guān)于springcloud體系下的超時(shí)相關(guān)的配置主要有下面的,最初接觸時(shí)瞬間感覺有點(diǎn)凌亂

ribbon:
  ReadTimeout: 10000 #單位ms,請(qǐng)求處理的超時(shí)時(shí)間
  ConnectTimeout: 200 #單位ms,請(qǐng)求連接超時(shí)時(shí)間
 

feign:
  hystrix:
    enabled: true
  client:
    config:
      default:
        connect-timeout: 200 #連接超時(shí)時(shí)間
        read-timeout: 10000

hystrix:
  threadpool:
    default:
      #設(shè)置feign的核心線程池的數(shù)量
      coreSize: 200
  command:
    default:
      execution:
        isolation:
          thread:
            #斷路器超時(shí)設(shè)置和請(qǐng)求的超時(shí)
            timeoutInMilliseconds: 12000
          isolation:
            semaphore:
              #設(shè)置回退的最大線程數(shù)
              maxConcurrentRequests: 10

?

ribbon,feign和hystrix說明

  • 先看ribbon和feign的區(qū)別
Ribbon
    Ribbon就是一種客戶端負(fù)載均衡的實(shí)現(xiàn),它是有Netflix發(fā)布的一個(gè)基于HTTP和TCP的客戶端負(fù)載均衡工具笨使。
    服務(wù)消費(fèi)者繼承Ribbon后卿樱,只需要配置服務(wù)提供者地址,Ribbon就可以基于指定的負(fù)載均衡算法硫椰,自動(dòng)幫服務(wù)消費(fèi)者分配請(qǐng)求繁调。
    Ribbon提供了很多常見的負(fù)載均衡算法萨蚕,入輪詢、隨機(jī)蹄胰、權(quán)重等岳遥。
    作為Spring Cloud體系中的一員,Ribbon可以和Eureka方便地集合使用裕寨,可以直接從Eureka Server中獲取所有服務(wù)提供者的節(jié)點(diǎn)地址寒随,
    然后根據(jù)指定的負(fù)載均衡策略選擇某個(gè)節(jié)點(diǎn)進(jìn)行訪問。

Feign
    Feign 是在 Ribbon的基礎(chǔ)上進(jìn)行了一次改進(jìn)帮坚,是一個(gè)使用起來更加方便的 HTTP 客戶端妻往。
    采用接口的方式, 只需要?jiǎng)?chuàng)建一個(gè)接口试和,然后在上面添加注解即可 讯泣,將需要調(diào)用的其他服務(wù)的方法定義成抽象方法即可, 不需要自己構(gòu)建http請(qǐng)求阅悍。
    SpringCloud對(duì)Feign進(jìn)?了增強(qiáng)好渠,使Feign?持了SpringMVC注解(OpenFeign)

簡(jiǎn)單總結(jié)下:
    ribbon 是用來負(fù)載均衡的
    feign 是基于ribbon的封裝,主要作用是讓接口的調(diào)用更加優(yōu)雅(接口+注解)
    因此可以這樣理解: feign的很多配置其實(shí)也是對(duì)ribbon的配置

主要功能
1、服務(wù)降級(jí)
      服務(wù)器繁忙节视,讓客戶稍后在試兜底的方法拳锚,另外的解決方案、哪些原因走兜底的方法呢寻行?
          1超時(shí)霍掺,2程序異常,3熔斷觸發(fā)降級(jí)拌蜘,線程池太高
2杆烁、服務(wù)熔斷
      類比保險(xiǎn)絲,
      達(dá)到最大服務(wù)訪問后简卧,直接拒絕訪問兔魂,拉閘斷電。
3举娩、服務(wù)限流
      秒殺高并發(fā)等操作析校,嚴(yán)禁一群蜂擁過來,大家排隊(duì)铜涉。有序進(jìn)行


  • ribbon,feign和hystrix時(shí)間相關(guān)說明
可以簡(jiǎn)單理解為:
    hystrix對(duì)應(yīng)的是斷路器的時(shí)間
    feign/ribbon對(duì)應(yīng)的是請(qǐng)求的時(shí)間

?

ribbon,feign和hystrix配置說明

關(guān)于ribbon和Feign默認(rèn)超時(shí)時(shí)間,查了資料,網(wǎng)上主要有2個(gè)版本
  • ribbon和Feign默認(rèn)超時(shí)時(shí)間都是1s
  • ribbon和Feign默認(rèn)的connectTimeout時(shí)長(zhǎng)是10s,readTimeout時(shí)長(zhǎng)是60s

經(jīng)過實(shí)際測(cè)試,無任何配置的情況下,1s后就超時(shí)了
源碼分析過程可以參考 https://blog.csdn.net/u011523825/article/details/120819416

image.png

關(guān)于ribbon和Feign超時(shí)時(shí)間配置說明
  • Feign 和 Ribbon 的超時(shí)時(shí)間只會(huì)有一個(gè)生效
  • 當(dāng)我們沒有顯式配飾feign的超時(shí)時(shí)間的是時(shí)候智玻,如果配置了ribbon的超時(shí)時(shí)間,則只有這個(gè)配置會(huì)生效骄噪,feign默認(rèn)的1s超時(shí)無效
  • 如果我們feign和ribbon的超時(shí)時(shí)間都配置了尚困,會(huì)以feign配置的為準(zhǔn)
關(guān)于hystrix默認(rèn)超時(shí)時(shí)間與配置說明

如果配置了hystrix功能,那么它的超時(shí)時(shí)間默認(rèn)就是開啟的链蕊,且該時(shí)間是1秒事甜,這個(gè)時(shí)間和ribbon的超時(shí)時(shí)間會(huì)同時(shí)起作用,不像上面的feign的超時(shí)時(shí)間和ribbon超時(shí)時(shí)間二選一滔韵,我們可以通過上面的配置hystrix的超時(shí)時(shí)間讓它更長(zhǎng)逻谦,或者顯式禁用hystrix的超時(shí)時(shí)間:

hystrix:
  command:
    default:
      execution:
        timeout:
        #這里表示禁用hystrix的超時(shí)時(shí)間限制
          enabled: false

?

時(shí)間配置規(guī)則案例分析
  • 這里分開啟/不開啟hystrix情況分別分析,開啟方式
feign:
 hystrix:
    enabled: true
  • 沒有開啟hystrix情況
看下下面的配置案例
// 下面的配置,read-timeout是5秒
feign:
  client:
    config:
      default:
        connect-timeout: 200 #連接超時(shí)時(shí)間
        read-timeout: 5000


// 下面的配置,read-timeout也是5秒(feign-5秒,ribbon-8秒)
feign:
  client:
    config:
      default:
        connect-timeout: 200 #連接超時(shí)時(shí)間
        read-timeout: 5000

ribbon:
  ReadTimeout: 10000 #單位ms,請(qǐng)求處理的超時(shí)時(shí)間
  ConnectTimeout: 8000 #單位ms,請(qǐng)求連接超時(shí)時(shí)間

  • 開啟hystrix情況
看下下面的配置案例
// 下面超時(shí)時(shí)間是5秒(feign-5秒,ribbon-8秒,hystrix-12秒)
feign:
  hystrix:
    enabled: true
  client:
    config:
      default:
        connect-timeout: 200 #連接超時(shí)時(shí)間
        read-timeout: 5000

ribbon:
  ReadTimeout: 8000 #單位ms,請(qǐng)求處理的超時(shí)時(shí)間
  ConnectTimeout: 200 #單位ms,請(qǐng)求連接超時(shí)時(shí)間
  

hystrix:
  threadpool:
    default:
      #設(shè)置feign的核心線程池的數(shù)量
      coreSize: 200
  command:
    default:
      execution:
        isolation:
          thread:
            #斷路器超時(shí)設(shè)置和請(qǐng)求的超時(shí)
            timeoutInMilliseconds: 12000
          isolation:
            semaphore:
              #設(shè)置回退的最大線程數(shù)
              maxConcurrentRequests: 10

日志
19:30:08.146 [http-nio-8273-exec-5] [587c47b639050fc3,587c47b639050fc3] INFO  OrderTestController.testTimeOut[21]- timeout test start
19:30:13.165 [hystrix-JIU-USER-2] [587c47b639050fc3,faf7c02d6b08ad0c] INFO  UserFeign$UserFeignFallBackFactory.testTimeOut[29]- testTimeOut fallback

?

feign、ribbon陪蜻、hystrix設(shè)置單個(gè)接口的超時(shí)時(shí)間

上面的配置主要是針對(duì)全局的配置,另外,我們也可以針對(duì)方法級(jí)別做配置,可以參考
https://blog.csdn.net/qq_35388010/article/details/125448911

單接口配置說明
  • feign設(shè)置單個(gè)接口超時(shí):通過指定的contextId
  • ribbon不能指定單個(gè)接口超時(shí)時(shí)間邦马,可以用feign配置單個(gè)接口超時(shí),feign和ribbon配置超時(shí)同時(shí)存在時(shí)宴卖,feign的配置生效滋将。要實(shí)現(xiàn)ribbon的單個(gè)接口超時(shí),需要重寫ribbon源碼症昏。
  • Hystrix默認(rèn)支持:全局(default )或 方法級(jí)(類名#方法名(參數(shù)類型) )配置随闽。類名#方法名(參數(shù)類型) 的方式配置不夠方便,可重寫feign.hystrix.SetterFactory肝谭,自定義CommandKey掘宪,使支持類名配置
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市攘烛,隨后出現(xiàn)的幾起案子魏滚,更是在濱河造成了極大的恐慌,老刑警劉巖坟漱,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鼠次,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡芋齿,警方通過查閱死者的電腦和手機(jī)须眷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沟突,“玉大人花颗,你說我怎么就攤上這事』菔茫” “怎么了扩劝?”我有些...
    開封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)职辅。 經(jīng)常有香客問我棒呛,道長(zhǎng),這世上最難降的妖魔是什么域携? 我笑而不...
    開封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任簇秒,我火速辦了婚禮,結(jié)果婚禮上秀鞭,老公的妹妹穿的比我還像新娘趋观。我一直安慰自己扛禽,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開白布皱坛。 她就那樣靜靜地躺著编曼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪剩辟。 梳的紋絲不亂的頭發(fā)上掐场,一...
    開封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音贩猎,去河邊找鬼熊户。 笑死,一個(gè)胖子當(dāng)著我的面吹牛吭服,可吹牛的內(nèi)容都是我干的嚷堡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼噪馏,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼麦到!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起欠肾,我...
    開封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤瓶颠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后刺桃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體粹淋,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年瑟慈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了桃移。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡葛碧,死狀恐怖借杰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情进泼,我是刑警寧澤蔗衡,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站乳绕,受9級(jí)特大地震影響绞惦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜洋措,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一济蝉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦王滤、人聲如沸贺嫂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涝婉。三九已至哥力,卻和暖如春蔗怠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背吩跋。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工寞射, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人锌钮。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓桥温,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親梁丘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子侵浸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

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