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

springcloud之Feign超時問題的解決

 更新時間:2021年06月24日 09:51:30   作者:Moshow鄭鍇  
這篇文章主要介紹了springcloud之Feign超時問題的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

問題背景

最近公司項目有個功能需進行三層Feign調用,且還要調外部接口,延遲挺大,造成Feign一直提示Read timed out executing POST。

feign.RetryableException: Read timed out executing POST http://******
        at feign.FeignException.errorExecuting(FeignException.java:67)
        at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:104)
        at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:76)
        at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:103)
        at com.sun.proxy.$Proxy113.getBaseRow(Unknown Source)
Caused by: java.net.SocketTimeoutException: Read timed out
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
        at java.net.SocketInputStream.read(SocketInputStream.java:170)
        at java.net.SocketInputStream.read(SocketInputStream.java:141)
        at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
        at java.io.BufferedInputStream.read1(BufferedInputStream.java:286)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:345)
        at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:704)
        at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:647)
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1569)
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474)
        at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480)
        at feign.Client$Default.convertResponse(Client.java:152)
        at feign.Client$Default.execute(Client.java:74)

解決方案

首先,我們看下Feign的簡介

Feign 是一個聲明式的web服務客戶端,這便得編寫web服務客戶端更容易,使用Feign 創(chuàng)建一個接口并對它進行注解,它具有可插拔的注解支持包括Feign注解與JAX-RS注解,F(xiàn)eign還支持可插拔的編碼器與解碼器,Spring Cloud 增加了對 Spring MVC的注解,Spring Web 默認使用了HttpMessageConverters, Spring Cloud 集成 Ribbon 和 Eureka 提供的負載均衡的HTTP客戶端 Feign.

這么說吧,F(xiàn)eign接口調用分兩層,Ribbon的調用和Hystrix調用,理論上設置Ribbon的時間即可,但是Ribbon的超時時間和Hystrix的超時時間需要結合起來,按照木桶原則最低的就是Feign的超時時間,建議最好配置超時時間一致。經(jīng)過配置一下application設置后,完美解決了問題。因為第三方接口中需要3~20秒不等的時間,所以這個數(shù)值也是根據(jù)自己的業(yè)務系統(tǒng)情況設置的。

application.xml

#hystrix的超時時間
hystrix:
    command:
        default:
            execution:
              timeout:
                enabled: true
              isolation:
                    thread:
                        timeoutInMilliseconds: 30000
#ribbon的超時時間
ribbon:
  ReadTimeout: 30000
  ConnectTimeout: 30000

springcloud之Feign 負載均衡請求超時時間

SpringCloud:Greenwich.SR4

SpringBoot:2.1.9.RELEASE

Feign調用服務的默認時長是1秒鐘,也就是如果超過1秒沒連接上或者超過1秒沒響應,那么會相應的報錯。

但是在實際的業(yè)務中,我們的服務可能因為特別原因(網(wǎng)絡、處理壓力大等)導致相應速度超過1秒鐘,那么就會報錯,下面我們就來處理如何手動配置Feigin的負載均衡超時等參數(shù)

全局配置

SpringCloud負載均衡底層用的就是Ribbon

#--------------Feign負載均衡配置 配置全局超時時間
ribbon:
  ConnectTimeout: 5000 #請求連接的超時時間,默認時間為1秒
  ReadTimeout: 5000 #請求處理的超時時間

5秒沒有響應成功就報如下錯誤(真實情況下,會比5s多一些,因為發(fā)送請求也需要時間的,模擬超時可以在請求處理的方法上用Thread.sleep()設置休眠時間超過5s)

局部配置(就是指定提供者)

#--------------Feign負載均衡配置 局部配置超時時間等
feign-product-provider: #指定配置的服務名稱
  ribbon:
    OkToRetryOnAllOperations: true # 對所有請求都進行重試
    MaxAutoRetries: 2 # 對當前實例的重試次數(shù)
    MaxAutoRetriesNextServer: 0 # 切換實例的重試次數(shù)(集群狀態(tài)下,其它對其它實例服務重試的次數(shù))
    ConnectTimeout: 3000 # 請求連接的超時時間
    ReadTimeout: 3000 # 請求處理的超時時間

上述提到的服務名稱如下配置

spring:
  application:
    name: feign-product-provider # 隨意設置

執(zhí)行的代碼

輸出結果

不是一共重試兩次嗎?這里邊就涉及到了一個公式

共重試次數(shù) = (MaxAutoRetries+MaxAutoRetriesNextServer+(MaxAutoRetries * MaxAutoRetiresNextServer)
      = 2 + 0 + (2 * 0)
      = 2

在加上我們手動請求一次那就是:2 + 1=3次

公式很重要!

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 一篇文章帶你了解Java容器,面板及四大布局管理器應用

    一篇文章帶你了解Java容器,面板及四大布局管理器應用

    這篇文章主要介紹了JAVA布局管理器與面板組合代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2021-08-08
  • Java中類加載過程全面解析

    Java中類加載過程全面解析

    這篇文章主要介紹了Java中類加載過程全面解析,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • idea注入mapper報錯報紅的幾種解決方案

    idea注入mapper報錯報紅的幾種解決方案

    相信大家在使用idea的時候一定會遇到這樣的問題,就是在service里注入mapper的時候,明明代碼沒有問題,也可以運行,但是idea它就是給你報個錯,有個紅色的波浪線在下面,所以本文將給大家介紹了idea注入mapper報錯報紅的幾種解決方案,需要的朋友可以參考下
    2023-12-12
  • mybatis主從表關聯(lián)查詢,返回對象帶有集合屬性解析

    mybatis主從表關聯(lián)查詢,返回對象帶有集合屬性解析

    這篇文章主要介紹了mybatis主從表關聯(lián)查詢,返回對象帶有集合屬性解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • FastJson對于JSON格式字符串、JSON對象及JavaBean之間的相互轉換操作

    FastJson對于JSON格式字符串、JSON對象及JavaBean之間的相互轉換操作

    這篇文章主要介紹了FastJson對于JSON格式字符串、JSON對象及JavaBean之間的相互轉換,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-11-11
  • Java笛卡爾積算法原理與實現(xiàn)方法詳解

    Java笛卡爾積算法原理與實現(xiàn)方法詳解

    這篇文章主要介紹了Java笛卡爾積算法原理與實現(xiàn)方法,結合實例形式較為詳細的分析了笛卡爾積算法的原理及java定義與使用笛卡爾積算法的相關操作技巧,需要的朋友可以參考下
    2017-12-12
  • 聊一聊Java中的Steam流

    聊一聊Java中的Steam流

    當我們需要處理的數(shù)據(jù)量很大的時候,為了提高性能,就需要使用到并行處理,這樣的處理方式是很復雜的,流可以幫助開發(fā)者節(jié)約寶貴的時間,讓以上的事情變得輕松,本文就和大家聊一聊Java中的Steam流,感興趣的同學跟著小編一起來看看吧
    2023-07-07
  • 解決MybatisPlus批量插入數(shù)據(jù)報錯:Error getting generated key or setting result to parameter object問題

    解決MybatisPlus批量插入數(shù)據(jù)報錯:Error getting generated 

    在使用MybatisPlus進行批量插入數(shù)據(jù)時遇到空指針異常錯誤,分析原因是由于主鍵生成策略導致的,嘗試通過設置useGeneratedKeys屬性解決問題,但因批量插入方法限制,該方法未能成功,最終通過自定義mapper方法實現(xiàn)批量插入,解決了問題
    2024-09-09
  • 一分鐘掌握Java?Quartz定時任務

    一分鐘掌握Java?Quartz定時任務

    這篇文章主要為大家介紹了Java?Quartz定時任務一分鐘掌握教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • SpringBoot實現(xiàn)Word轉PDF和TXT的實踐分享

    SpringBoot實現(xiàn)Word轉PDF和TXT的實踐分享

    研發(fā)工作中難免會遇到一些奇奇怪怪的需求,就比如最近,客戶提了個新需求:上傳一個WORD文檔,要求通過系統(tǒng)把該文檔轉換成PDF和TXT,所以本文給大家分享了SpringBoot實現(xiàn)Word轉PDF和TXT的實踐,感興趣的朋友可以參考下
    2024-08-08

最新評論