【Spring Cloud】詳解Feign常用配置

1 Feign常用配置

搭載著Spring Cloud的順風(fēng)車,F(xiàn)eign正以席卷之勢成為使用Spring架構(gòu)的大大小小互聯(lián)網(wǎng)公司發(fā)起HTTP調(diào)用的首選框架猎莲。基于接口的聲明式定義辅肾、客戶端負載均衡锻拘、斷路器和后備方法(fallback)是Feign相對上一代HTTP調(diào)用框架(比如Spring Template,Apache HttpClient)的四大優(yōu)勢纯路。

類似于Retrofit和OkHttp的關(guān)系或油,F(xiàn)eign實際上是對普通HTTP客戶端的一層封裝,其目的是降低集成成本驰唬、提升可靠性顶岸。Feign支持三種HTTP客戶端腔彰,包括JDK自帶的HttpURLConnection、Apache HttpClient和Square OkHttp辖佣,默認使用Apache HttpClient霹抛。

  • HttpURLConnection:不支持線程池,一般不會選用卷谈。
  • HttpClient:相比OkHttp杯拐,HttpClient并沒有明顯的優(yōu)勢,可能是因為使用更廣泛世蔗,所以被Feign選為默認實現(xiàn)端逼。從5.0版本開始才支持HTTP/2。
  • OkHttp:開發(fā)Android應(yīng)用的首選HTTP客戶端污淋,支持HTTP/2顶滩,通過設(shè)置feign.okhttp.enabled=true啟用。

Feign提供了兩大類配置屬性來配置上述三種HTTP客戶端寸爆,feign.client.*feign.httpclient.*礁鲁,前者支持按實例進行配置(注解-1),后者全局共享一套配置赁豆,包含線程池配置仅醇,但只影響HttpClient和OkHttp,不影響HttpURLConnection魔种,具體關(guān)系見下表析二。

注解-1:所謂按實例進行配置,就是指每個FeignClient實例都可以通過feign.client.<feignClientName>.*來單獨進行配置务嫡,注意首字母小寫甲抖。而feign.client.default.*表示默認配置。

HTTP客戶端 連接超時時間 請求超時時間 線程存活時間 線程池最大連接數(shù)(全局) 線程池最大連接數(shù)(單個HOST)
HttpURLConnection feign.client.<code>[default|<feignClientName>].connect-timeout</code>
默認值:10秒
feign.client.<code>[default|<feignClientName>].read-timeout</code>
默認值:60秒
N/A N/A N/A
HttpClient feign.httpclient.connection-timeout
默認值:2秒
默認值:-1(RequestConfig.Builder.socketTimeout) feign.httpclient.time-to-live
默認值:900秒
feign.httpclient.max-connections
默認值:200
feign.httpclient.max-connections-per-route
默認值:50
OkHttp feign.httpclient.connection-timeout
默認值:2秒
feign.client.<code>[default|<feignClientName>].read-timeout</code>
默認值:10秒
feign.httpclient.time-to-live
默認值:900秒
feign.httpclient.max-connections
默認值:200
N/A

從上表可以看到心铃,F(xiàn)eign提供了兩個連接超時配置准谚,HttpURLConnection使用feign.client.[default|<feignClientName>].connect-timeout,而HttpClient和OkHttp則使用feign.httpclient.connection-timeout去扣,這一點要尤其注意柱衔。

2 啟用Hystrix

通過設(shè)置feign.hystrix.enabled=true可以啟用Feign的斷路器支持(基于Hystrix)。跟Feign一樣愉棱,Hystrix也支持按實例進行配置唆铐,詳細配置屬性參見官方文檔

由于Hystrix默認的請求超時時間為1秒奔滑,很容易觸發(fā)超時異常艾岂,所以往往需要調(diào)大。調(diào)大超時時間有兩種方式朋其,

  • 第一種方式王浴,通過hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds設(shè)置默認超時時間脆炎,影響所有請求。
  • 第二種方式氓辣,如果你不想改變所有請求的超時時間秒裕,那么可以通過hystrix.command.<HystrixCommandKey>.execution.isolation.thread.timeoutInMilliseconds單獨設(shè)置某個Hystrix Command的超時時間。那么問題來了钞啸,F(xiàn)eign下面几蜻,這個Hystrix Command Key到底是什么呢,是和Feign Client Name一樣嗎体斩?答案是否定的梭稚。Feign下面,一個Hystrix Command對應(yīng)的是Feign Client的一個方法硕勿,因此Hystrix Command Key的定義為<FeignClientName>#<methodName>(<arg1ClassName>,<arg2ClassName>...)哨毁,注意首字母大寫,詳見SetterFactory.Default#create()方法源武。

3 小結(jié)

不管是Spring還是Spring Cloud,由于整個生態(tài)過于龐大想幻,因此即便是官方文檔粱栖,也只能勉強覆蓋各個組件的大體框架,一旦深入細節(jié)就只能靠開發(fā)者自己研讀源碼來尋找答案脏毯。就像Linus Torvalds說的闹究,Talk is cheap. Show me the code.

quote-talk-is-cheap-show-me-the-code-linus-torvalds.jpg

4 參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末渣淤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子吉嫩,更是在濱河造成了極大的恐慌价认,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件自娩,死亡現(xiàn)場離奇詭異用踩,居然都是意外死亡,警方通過查閱死者的電腦和手機忙迁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門脐彩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人姊扔,你說我怎么就攤上這事惠奸。” “怎么了恰梢?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵佛南,是天一觀的道長梗掰。 經(jīng)常有香客問我,道長共虑,這世上最難降的妖魔是什么愧怜? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮妈拌,結(jié)果婚禮上拥坛,老公的妹妹穿的比我還像新娘。我一直安慰自己尘分,他們只是感情好猜惋,可當(dāng)我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著培愁,像睡著了一般著摔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上定续,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天谍咆,我揣著相機與錄音,去河邊找鬼私股。 笑死摹察,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的倡鲸。 我是一名探鬼主播供嚎,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼峭状!你這毒婦竟也來了克滴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤优床,失蹤者是張志新(化名)和其女友劉穎劝赔,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體羔巢,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡望忆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了竿秆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片启摄。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖幽钢,靈堂內(nèi)的尸體忽然破棺而出歉备,到底是詐尸還是另有隱情,我是刑警寧澤匪燕,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布蕾羊,位于F島的核電站喧笔,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏龟再。R本人自食惡果不足惜书闸,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望利凑。 院中可真熱鬧浆劲,春花似錦、人聲如沸哀澈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽割按。三九已至膨报,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間适荣,已是汗流浹背现柠。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留弛矛,地道東北人晒旅。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像汪诉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子谈秫,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,927評論 2 355