中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

線上SpringCloud?Feign請求服務超時異常怎么排查

發布時間:2022-01-13 16:46:18 來源:億速云 閱讀:377 作者:iii 欄目:開發技術

今天小編給大家分享一下線上SpringCloud Feign請求服務超時異常怎么排查的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

由于近期線上單量暴漲,第三方反饋部分工單業務存在查詢處理失敗現象,經排查是當前系統通過FeignClient調用下游系統出現部分超時失敗(異常代碼貼在下方)。

Caused by: feign.RetryableException: Read timed out executing POST http://xxxx
        at feign.FeignException.errorExecuting(FeignException.java:84) ~[feign-core-10.1.0.jar!/:na]
        at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:113) ~[feign-core-10.1.0.jar!/:na]
        at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:78) ~[feign-core-10.1.0.jar!/:na]
        at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:103) ~[feign-core-10.1.0.jar!/:na]
        at com.sun.proxy.$Proxy141.creditReportConvert(Unknown Source) ~[na:na]
Caused by: java.net.SocketTimeoutException: Read timed out
        at java.net.SocketInputStream.socketRead0(Native Method) ~[na:1.8.0_121]
        at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) ~[na:1.8.0_121]
        at java.net.SocketInputStream.read(SocketInputStream.java:171) ~[na:1.8.0_121]
        at java.net.SocketInputStream.read(SocketInputStream.java:141) ~[na:1.8.0_121]
        at java.io.BufferedInputStream.fill(BufferedInputStream.java:246) ~[na:1.8.0_121]
        at java.io.BufferedInputStream.read1(BufferedInputStream.java:286) ~[na:1.8.0_121]
        at java.io.BufferedInputStream.read(BufferedInputStream.java:345) ~[na:1.8.0_121]
        at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:704) ~[na:1.8.0_121]
        at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:647) ~[na:1.8.0_121]
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1569) ~[na:1.8.0_121]
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474) ~[na:1.8.0_121]
        at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480) ~[na:1.8.0_121]
        at feign.Client$Default.convertResponse(Client.java:143) ~[feign-core-10.1.0.jar!/:na]
        at feign.Client$Default.execute(Client.java:68) ~[feign-core-10.1.0.jar!/:na]
        at org.springframework.cloud.openfeign.ribbon.FeignLoadBalancer.execute(FeignLoadBalancer.java:93) ~[spring-cloud-openfeign-core-2.1.1.RELEASE.jar!/:2.1.1.RELEASE]
        at org.springframework.cloud.openfeign.ribbon.FeignLoadBalancer.execute(FeignLoadBalancer.java:56) ~[spring-cloud-openfeign-core-2.1.1.RELEASE.jar!/:2.1.1.RELEASE]
        at com.netflix.client.AbstractLoadBalancerAwareClient$1.call(AbstractLoadBalancerAwareClient.java:104) ~[ribbon-loadbalancer-2.3.0.jar!/:2.3.0]
        at com.netflix.loadbalancer.reactive.LoadBalancerCommand$3$1.call(LoadBalancerCommand.java:303) ~[ribbon-loadbalancer-2.3.0.jar!/:2.3.0]

通過系統慢請求捕捉攔截,發現當前請求僅耗時1031毫秒,就觸發Read timed out超時錯誤,本項目與下游項目均注冊在Eureka上面,對這個1秒就超時感到很迷惑,于是開始查閱底層源碼之旅。

線上SpringCloud?Feign請求服務超時異常怎么排查

線上SpringCloud?Feign請求服務超時異常怎么排查

通過跟蹤代碼可以在feign.Request內部類Options構造函數默認配置連接超時10秒,讀超時60秒。然而本次調用請求僅耗時1秒左右就被掐斷連接提示超時錯誤,初步判斷默認這個超時配置并未生效導致。

線上SpringCloud?Feign請求服務超時異常怎么排查

寫到這,咱們先回顧下Feign鏈路完整調用流程步驟。

線上SpringCloud?Feign請求服務超時異常怎么排查

可以看出Feign調用分為Hystrix、Ribbon兩層,一般高版本的Hystrix默認是關閉的(本項目Hystrix默認是關閉的,那么現在需要去分析Ribbon層調用配置信息)

線上SpringCloud?Feign請求服務超時異常怎么排查

可以看到RibbonClientConfiguration默認配置的讀超時和連接超時時間1000毫秒=1秒,在沒有配置超時情況下當前這個超時是符合本次調用超時錯誤觸發。

線上SpringCloud?Feign請求服務超時異常怎么排查

我們可以在FeignLoadBalancer的execute方法中看到當IClientConfig為空的時候進行覆蓋超時時間,默認是取Ribbon的超時時間,并不是Feign Options默認的超時時間。

public FeignLoadBalancer(ILoadBalancer lb, IClientConfig clientConfig,
            ServerIntrospector serverIntrospector) {
        super(lb, clientConfig);
        this.setRetryHandler(RetryHandler.DEFAULT);
        this.clientConfig = clientConfig;
        this.ribbon = RibbonProperties.from(clientConfig);
        RibbonProperties ribbon = this.ribbon;
        this.connectTimeout = ribbon.getConnectTimeout();
        this.readTimeout = ribbon.getReadTimeout();
        this.serverIntrospector = serverIntrospector;
    }

如果application.properties文件中有配置超時時間,則使用配置的超時時間。否則是取Ribbon默認的超時時間,也就是網上所說的Feign調用服務的默認時長是1秒鐘,也就是如果超過1秒沒連接上或者超過1秒沒響應,那么會相應的報錯。

實際業務中服務如果響應時間超過1秒,咱們可以按照實際響應情況給予配置相對應的超時時間,下面分別貼出properties和yml版本的配置

#properties版本
feign.client.config.default.connectTimeout=60000
feign.client.config.default.readTimeout=60000
#yml版本
feign:
  client:
    config:
      default:
        connectTimeout: 60000
        readTimeout: 60000

以上就是“線上SpringCloud Feign請求服務超時異常怎么排查”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

邵阳县| 攀枝花市| 周宁县| 平度市| 永济市| 井研县| 开阳县| 济宁市| 古丈县| 阜新| 茂名市| 建始县| 炉霍县| 阿拉善右旗| 刚察县| 馆陶县| 泊头市| 静宁县| 莱州市| 屯昌县| 滕州市| 仁寿县| 灵寿县| 台州市| 田林县| 江城| 公主岭市| 大理市| 丘北县| 萨迦县| 新疆| 图木舒克市| 临高县| 安塞县| 汉阴县| 眉山市| 黄山市| 且末县| 当阳市| 抚顺市| 商洛市|