SpringCloud OpenFeign與Ribbon客戶端配置詳解
一、前言
OpenFeign為微服務(wù)架構(gòu)下服務(wù)之間的調(diào)用提供了解決方案,OpenFeign是一種聲明式、模板化的HTTP客戶端。在Spring Cloud中使用OpenFeign,可以做到使用HTTP請求訪問遠(yuǎn)程服務(wù),就像調(diào)用本地方法一樣的,開發(fā)者完全感知不到這是在調(diào)用遠(yuǎn)程方法,更感知不到在訪問HTTP請求。但是如果請求連接超時、處理請求超時怎么辦,如果我們放任不管聽之任之勢必造成服務(wù)雪崩,客戶電話打爆投訴,背鍋的又會是誰呢?所以本篇文章我們來探究一下超時處理:
二、OpenFeign與Ribbon配置
這里的例子可以在本專欄里面找到,也可以自己手動試試。
1、OpenFeign默認(rèn)處理請求超時時間
1.1、模擬處理請求0.5秒
@Override public String feign(String str) { try { // 模擬處理請求超時 Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } return "Hello " + str + ":"; }
用postman請求看下feign調(diào)用結(jié)果:
可以看到正常執(zhí)行并返回了結(jié)果。 我們繼續(xù)看下面的一組實驗:
1.2、模擬處理請求1秒
@Override public String feign(String str) { try { // 模擬處理請求超時熔斷 Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } return "Hello " + str + ":"; }
用postman請求看下feign調(diào)用結(jié)果:
響應(yīng)結(jié)果是“網(wǎng)絡(luò)繁忙,請稍后再試試?。?!” ,可見請求超時了會降級處理。所以O(shè)penFeign默認(rèn)處理請求操作超時時間為1秒。這個時間確實是快了點!
2、Ribbon配置
2.1、配置請求處理超時5秒
ribbon:
eureka:
enabled: false #由于使用Nacos,而不是Eureka
eager-load:
enabled: true #饑餓加載,系統(tǒng)啟動時創(chuàng)建好ribbon客戶端而不是在使用時去創(chuàng)建
ConnectTimeout: 5000 #單位ms,請求連接超時時間 那這里1分鐘
ReadTimeout: 5000 #單位ms,請求處理的超時時間
OkToRetryOnAllOperations: false #對所有操作請求都進(jìn)行重試
MaxAutoRetriesNextServer: 0 #切換實例的重試次數(shù)
MaxAutoRetries: 0 #對當(dāng)前實例的重試次數(shù)
ServerListRefreshInterval: 2000 #從源刷新服務(wù)器列表的間隔
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RetryRule
用postman請求看下feign調(diào)用結(jié)果:
可見Ribbon中配置的超時時間5秒相對于模擬睡眠時間1秒較長,睡眠時間過了處理完請求,返回正常結(jié)果。
2.2、模擬請求處理5秒
@Override public String feign(String str) { try { // 模擬處理請求超時熔斷 Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } return "Hello " + str + ":"; }
用postman請求看下feign調(diào)用結(jié)果:
響應(yīng)結(jié)果是“網(wǎng)絡(luò)繁忙,請稍后再試試?。。?rdquo; ,可見請求超時了會降級處理。所以處理請求操作不能時間不能超過Ribbon配置的處理請求超時時間,否則會被降級處理(自己定義降級處理)!
3、OpenFeign配置
3.1、配置請求處理超時6秒
用postman請求看下feign調(diào)用結(jié)果:feign:
sentinel:
enabled: true
# 設(shè)置 feign 超時時間,優(yōu)先級高于ribbon配置
client:
config:
# default 設(shè)置的全局超時時間,指定服務(wù)名稱可以設(shè)置單個服務(wù)的超時時間
default:
connectTimeout: 6000
readTimeout: 6000
可見雖然Ribbon中配置的超時時間5秒,但是feign配置的處理請求超時時間為6秒,相對于模擬睡眠時間5秒大于ribbon配置時間小于feign配置時間并且處理完請求,返回正常結(jié)果。那么feign的配置覆蓋了ribbon配置的超時時間,feign的配置優(yōu)先級高于ribbon的。
3.2、OpenFeign配置對全部服務(wù)有效
feign:
hystrix:
# Feign啟用斷路器,默認(rèn)為FALSE
enabled: true
client:
config:
# 針對所有的服務(wù)
default:
# Feign的連接建立超時時間,默認(rèn)為10秒
connectTimeout: 5000
# Feign的請求處理超時時間,默認(rèn)為60秒
readTimeout: 5000
# 日志級別
loggerLevel: full
# 錯誤解碼器
errorDecoder: com.example.SimpleErrorDecoder
# 重試策略
retryer: com.example.SimpleRetryer
# 攔截器配置(和@Bean的方式二選一)
requestInterceptors:
- com.example.FooRequestInterceptor
- com.example.BarRequestInterceptor
# 是否對404錯誤碼解碼
# 處理邏輯詳見feign.SynchronousMethodHandler#executeAndDecode
decode404: false
# 編碼器
encoder: com.example.SimpleEncoder
# 解碼器
decoder: com.example.SimpleDecoder
# 契約
contract: com.example.SimpleContract
注意config下的default。
3.3、針對某個服務(wù)
feign:
hystrix:
# Feign啟用斷路器,默認(rèn)為FALSE
enabled: true
client:
config:
# 針對某個服務(wù)
ceam-wx:
# Feign的連接建立超時時間,默認(rèn)為10秒
connectTimeout: 5000
# Feign的請求處理超時時間,默認(rèn)為60秒
readTimeout: 5000
# 日志級別
loggerLevel: full
# 錯誤解碼器
errorDecoder: com.example.SimpleErrorDecoder
# 重試策略
retryer: com.example.SimpleRetryer
# 攔截器配置(和@Bean的方式二選一)
requestInterceptors:
- com.example.FooRequestInterceptor
- com.example.BarRequestInterceptor
# 是否對404錯誤碼解碼
# 處理邏輯詳見feign.SynchronousMethodHandler#executeAndDecode
decode404: false
# 編碼器
encoder: com.example.SimpleEncoder
# 解碼器
decoder: com.example.SimpleDecoder
# 契約
contract: com.example.SimpleContract
注意config下的ceam-wx(服務(wù)名)。
到此這篇關(guān)于SpringCloud OpenFeign與Ribbon客戶端配置詳解的文章就介紹到這了,更多相關(guān)SpringCloud OpenFeign與Ribbon內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java框架搭建之Maven、Mybatis、Spring MVC整合搭建(圖文)
這篇文章主要介紹了Java框架搭建之Maven、Mybatis、Spring MVC整合搭建(圖文),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-12-12詳解如何使用ModelMapper庫進(jìn)行對象之間的屬性映射
這篇文章主要介紹了如何使用ModelMapper庫進(jìn)行對象之間的屬性映射實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07