最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何解決springcloud feign 首次調(diào)用100%失敗的問題

 更新時間:2021年06月23日 11:38:13   作者:lipengxs  
這篇文章主要介紹了如何解決springcloud feign 首次調(diào)用100%失敗的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

敘述

在高并發(fā)情況下發(fā)布應(yīng)用時,經(jīng)常會發(fā)現(xiàn)監(jiān)控中有很多超時報錯或者斷路器打開,下圖中可以看到監(jiān)控情況,測試時也會偶現(xiàn)第一次feign調(diào)用出錯,第二次就會恢復(fù)正常。

分析

大家都知道,這里feign底層是集成的ribbon,這里ribbon也會有http連接池,這里的連接池是長連接,定時初始化一批并銷毀舊連接,這里還包括一些上下文需要初始化,但是在容器初始化好時,ribbon底層的client是未初始化的,當?shù)谝淮握{(diào)用時,有一個初始化過程會導(dǎo)致超時,一般情況下會說需要調(diào)整超時時間,但是在電商高并發(fā)情況下,這里肯定時不現(xiàn)實的,響應(yīng)請求都需要ms級別。

解決方案

ribbon饑餓加載

這里可以通過配置ribbon饑餓加載來減少出錯次數(shù),如下:

ribbon:
  # 饑餓加載
  eager-load:
    # 是否開啟饑餓加載
    enabled: true
    # 饑餓加載的服務(wù)
    clients: demo-goods,demo-product

這里為什么說不能完全解決呢?因為在發(fā)布時流量切換的瞬間,流量太大,并不是僅僅ribbon需要初始化,hystrix、web容器線程池等都需要初始化或者擴容,這里也需要耗時,所以這里的饑餓加載僅僅只是做到了發(fā)布時減少錯誤數(shù)。

zuul饑餓加載

網(wǎng)關(guān)作為對外請求的入口,zuul內(nèi)部使用Ribbon調(diào)用其他服務(wù),Spring Cloud默認在第一次調(diào)用時懶加載Ribbon客戶端。zuul同樣需要維護一個相對的子應(yīng)用環(huán)境的上下文,所以也需要啟動時饑餓加載。

zuul:
  ribbon:
    eager-load:
      enabled: true

springcloud 中Feign調(diào)用常見問題

注: 本文基于Springcloud Edgware版本

一、Feign調(diào)用首次失敗問題

1、Feign簡介:

Feign是一個聲明式的偽Http客戶端,它使得寫Http客戶端變得更簡單。使用Feign,只需要創(chuàng)建一個接口并注解。它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解,F(xiàn)eign 整合了Ribbon。

2、原因分析:

Feign整合Hystrix組件后,Hystrix默認的超時時間是1秒,如果超過這個時間尚未響應(yīng),將會進入自定義的fallback代碼,往往首次請求會比較慢(由于Ribbon是懶加載的,在首次請求時,才會開始初始化相關(guān)類),這個響應(yīng)時間可能就大于1秒了,出現(xiàn)調(diào)用失敗

3、解決方案

(1)增加Hystrix的超時時間,默認為1s

hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds:  10000

(2)配置餓加載(推薦使用)

ribbon:
  eager-load:
    clients:  project1,project2
    enabled:  true

(3)禁用Hystrix超時(不推薦使用)

hystrix:
  command:
    default:
      execution:
        timeout:
          enabled:  false

(4)為fegin全局禁用hystrix(此種方式較為極端,不建議使用)

feign:
 hystrix:
  enabled: false

二、Feign整合Hystrix之后日志顯示問題

1、解決方案

Feign整合Hystrix之后,當調(diào)用失敗會走fallback邏輯,造成日志不顯示,往往我們需要看日志分析原因,進行故障排查。

(1)在application中配置,開區(qū)Feign對Hystrix的支持

feign:
  hystrix:
    enabled: true

(2)編寫Feigin的客戶端以及回滾類

在客戶端FeignClient注解配置相對應(yīng)的回滾類,fallbackFactory = LogFallbackFactory.class,name屬性為注冊中心其他服務(wù)的名稱

/**
 * @description:fegin調(diào)用客戶端
 *
 * @author: LUOYUAN
 * @date: 2019-08-07-10:33
 * @function:
 */
@FeignClient(name = "eureka-log",path = "/api/log",fallbackFactory = LogFallbackFactory.class)
public interface LogFeignClient {
    
    @RequestMapping(value = "list", method = RequestMethod.GET)
    public String logList();
}
/**
 * @description:feign調(diào)用失敗邏輯
 * @author: LUOYUAN
 * @date: 2019-08-07-10:34
 * @function:
 */
@Slf4j
public class LogFallbackFactory implements FallbackFactory<LogFeignClient> {
    @Override
    public LogFeignClient create(Throwable throwable) {

        return new LogFeignClient() {
            @Override
            public String logList() {
                log.info("query log fallback reason was:",throwable);
                return null;
            }
        };
    }
}

調(diào)用失敗會打印異常信息

query log fallback reason was:
feign.RetryableException: Connection refused: connect executing GET http://eureka-log/api/log/list
at feign.FeignException.errorExecuting(FeignException.java:132)
at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:113)
at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:78)
at feign.hystrix.HystrixInvocationHandler$1.run(HystrixInvocationHandler.java:109)
at com.netflix.hystrix.HystrixCommand$2.call(HystrixCommand.java:302)
at com.netflix.hystrix.HystrixCommand$2.call(HystrixCommand.java:298)

三、Feign調(diào)用時定義的fallback不生效

Springcloud Dalston之前得到版本,F(xiàn)eign默認已經(jīng)開啟了Hystrix熔斷器,從Dalaton版本開始,默認關(guān)閉Hystrix支持,需手動開啟,在application.yaml中添加如下配置

feign:
  hystrix:
    enabled: true

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

相關(guān)文章

  • Springboot項目通過redis實現(xiàn)接口的冪等性

    Springboot項目通過redis實現(xiàn)接口的冪等性

    這篇文章主要為大家介紹了Springboot項目通過redis實現(xiàn)接口的冪等性,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • 使用Digester解析XML文件的三種方式小結(jié)

    使用Digester解析XML文件的三種方式小結(jié)

    Digester是apache開源項目Commons中的一個子項目,用于解析XML文檔的工具,本文為大家整理了Digester解析XML文件的三種方式,希望對大家有所幫助
    2024-01-01
  • SpringBoot Admin 使用指南(推薦)

    SpringBoot Admin 使用指南(推薦)

    這篇文章主要介紹了SpringBoot Admin 使用指南(推薦),Spring Boot Admin 是一個管理和監(jiān)控你的 Spring Boot 應(yīng)用程序的應(yīng)用程序,非常具有實用價值,需要的朋友可以參考下
    2018-01-01
  • Java實現(xiàn)Promise.all()的示例代碼

    Java實現(xiàn)Promise.all()的示例代碼

    這篇文章主要介紹了Java實現(xiàn)Promise.all()的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • Spring中的HandlerMapping執(zhí)行流程詳解

    Spring中的HandlerMapping執(zhí)行流程詳解

    這篇文章主要介紹了Spring中的HandlerMapping執(zhí)行流程詳解,HandlerMapping在Spring MVC框架的jar包下面,他是處理映射器,為用戶發(fā)送的請求找到合適的Handler Adapter,它將會把請求映射為HandlerExecutionChain對象,需要的朋友可以參考下
    2023-08-08
  • RocketMQ重試機制及消息冪代碼實例解析

    RocketMQ重試機制及消息冪代碼實例解析

    這篇文章主要介紹了RocketMQ重試機制及消息冪代碼實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • Java去重排序之Comparable與Comparator的使用及說明

    Java去重排序之Comparable與Comparator的使用及說明

    這篇文章主要介紹了Java去重排序之Comparable與Comparator的使用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Mybatis-Plus自動填充更新操作相關(guān)字段的實現(xiàn)

    Mybatis-Plus自動填充更新操作相關(guān)字段的實現(xiàn)

    數(shù)據(jù)庫表中應(yīng)該都要有create_time、update_time字段;那么在開發(fā)中,對于這些共有字段的處理應(yīng)該要進行統(tǒng)一,這樣就可以簡化我們的開發(fā)過程。那么本文就對Mybatis-Plus中的字段自動填充進行記錄
    2021-11-11
  • SpringCloud Finchley Gateway 緩存請求Body和Form表單的實現(xiàn)

    SpringCloud Finchley Gateway 緩存請求Body和Form表單的實現(xiàn)

    在接入Spring-Cloud-Gateway時,可能有需求進行緩存Json-Body數(shù)據(jù)或者Form-Urlencoded數(shù)據(jù)的情況。這篇文章主要介紹了SpringCloud Finchley Gateway 緩存請求Body和Form表單的實現(xiàn),感興趣的小伙伴們可以參考一下
    2019-01-01
  • Java動態(tài)初始化數(shù)組,元素默認值規(guī)則詳解

    Java動態(tài)初始化數(shù)組,元素默認值規(guī)則詳解

    動態(tài)初始化數(shù)組涉及先定義數(shù)組長度,后填充具體數(shù)據(jù),適用于數(shù)據(jù)量已知但具體值未定的情況,這種初始化方式允許程序運行過程中賦值,并會根據(jù)數(shù)據(jù)類型設(shè)定默認值,如整型為0,字符串為null,動態(tài)初始化與靜態(tài)初始化格式不能混用
    2024-10-10

最新評論

金坛市| 云南省| 易门县| 绵阳市| 铜川市| 马山县| 彰化县| 沾益县| 彩票| 庆元县| 尼木县| 星子县| 平湖市| 千阳县| 武功县| 关岭| 新密市| 正定县| 郯城县| 大港区| 霸州市| 天水市| 黎川县| 综艺| 东辽县| 托克逊县| 尼木县| 织金县| 伊宁市| 赤城县| 淳安县| 洪泽县| 江陵县| 民县| 江油市| 翁源县| 儋州市| 富锦市| 唐山市| 黄山市| 香格里拉县|