欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

記一次線上SpringCloud Feign請求服務超時異常排查問題

 更新時間:2022年01月13日 15:17:05   作者:小鄧學長  
這篇文章主要介紹了記一次線上SpringCloud Feign請求服務超時異常排查問題,本項目與下游項目均注冊在Eureka上面,對這個1秒就超時感到很迷惑,于是開始查閱底層源碼之旅。需要的朋友可以參考下

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

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]

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

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

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

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

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

我們可以在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默認的超時時間,也就是網(wǎng)上所說的Feign調(diào)用服務的默認時長是1秒鐘,也就是如果超過1秒沒連接上或者超過1秒沒響應,那么會相應的報錯。

實際業(yè)務中服務如果響應時間超過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請求服務超時異常排查的文章就介紹到這了,更多相關SpringCloud Feign請求服務超時內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • SpringBoot后臺實現(xiàn)文件上傳下載

    SpringBoot后臺實現(xiàn)文件上傳下載

    這篇文章主要為大家詳細介紹了SpringBoot后臺實現(xiàn)文件上傳下載,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • 如何使用Spring+redis實現(xiàn)對session的分布式管理

    如何使用Spring+redis實現(xiàn)對session的分布式管理

    本篇文章主要介紹了如何使用Spring+redis實現(xiàn)對session的分布式管理,本文主要是在Spring中實現(xiàn)分布式session,采用redis對session進行持久化管理,感興趣的小伙伴們可以參考一下
    2018-06-06
  • 詳解Java中的pinpoint1.8.5安裝及使用指南

    詳解Java中的pinpoint1.8.5安裝及使用指南

    pinpoint是開源在github上的一款APM監(jiān)控工具,它是用Java編寫的,用于大規(guī)模分布式系統(tǒng)監(jiān)控。這篇文章主要介紹了pinpoint1.8.5安裝及使用指南,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-10-10
  • Java JVM類加載機制解讀

    Java JVM類加載機制解讀

    JVM將class文件字節(jié)碼文件加載到內(nèi)存中, 并將這些靜態(tài)數(shù)據(jù)轉換成方法區(qū)中的運行時數(shù)據(jù)結構,在堆(并不一定在堆中,HotSpot在方法區(qū)中)中生成一個代表這個類的java.lang.Class 對象,作為方法區(qū)類數(shù)據(jù)的訪問入口,接下來將詳細講解JVM類加載機制
    2021-11-11
  • Spring中RedisTemplate使用方法詳解

    Spring中RedisTemplate使用方法詳解

    Spring封裝了一個比較強大的模板,也就是redisTemplate,方便在開發(fā)的時候操作Redis緩存,這篇文章主要給大家介紹了關于Java中RedisTemplate使用方法的相關資料,需要的朋友可以參考下
    2023-12-12
  • 如何讓Jackson JSON生成的數(shù)據(jù)包含的中文以unicode方式編碼

    如何讓Jackson JSON生成的數(shù)據(jù)包含的中文以unicode方式編碼

    這篇文章主要介紹了如何讓Jackson JSON生成的數(shù)據(jù)包含的中文以unicode方式編碼。需要的朋友可以過來參考下,希望對大家有所幫助
    2013-12-12
  • Java實現(xiàn)AOP面向切面編程的實例教程

    Java實現(xiàn)AOP面向切面編程的實例教程

    這篇文章主要介紹了Java實現(xiàn)AOP面向切面編程的實例教程,通常Java中的AOP都是利用Spring框架中造好的輪子來開發(fā),而本文則關注于Java本身AOP的設計模式實現(xiàn),需要的朋友可以參考下
    2016-04-04
  • Java pdf和jpg互轉案例

    Java pdf和jpg互轉案例

    這篇文章主要介紹了Java pdf和jpg互轉案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • 非常全面的IReport的使用教程

    非常全面的IReport的使用教程

    iReport 是為JasperReports Library和JasperReports Server設計的報表可視化設計器。本教程給大家詳細介紹IReport的使用解析,感興趣的朋友一起看看吧
    2021-10-10
  • Java提取2個集合中的相同和不同元素代碼示例

    Java提取2個集合中的相同和不同元素代碼示例

    這篇文章主要介紹了Java提取2個集合中的相同和不同元素代碼示例,涉及對removeall方法的簡單介紹,然后分享了主要的示例代碼,具有一定借鑒價值,需要的朋友可以參考下。
    2017-11-11

最新評論