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

Feign Client 超時(shí)時(shí)間配置不生效的解決

 更新時(shí)間:2021年09月24日 11:03:54   作者:wuweijie@apache.org  
這篇文章主要介紹了Feign Client 超時(shí)時(shí)間配置不生效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Feign Client 超時(shí)時(shí)間配置不生效

解決方案

Feign Client 的 connectTimeout 和 readTimeout 需要同時(shí)配置:

feign.client.config.my-api.connectTimeout = 10000
feign.client.config.my-api.readTimeout = 600000

如果只配置了 readTimeout 或 connectTimeout 的其中一條,配置不生效。

問(wèn)題描述

Feign Client 配置如下:

feign.client.config.default.connectTimeout = 3000
feign.client.config.default.readTimeout = 3000
feign.client.config.my-api.readTimeout = 600000

默認(rèn)超時(shí)時(shí)間配置了 3 秒。

由于 my-api 的響應(yīng)數(shù)據(jù)較大,于是配置了 10 分鐘超時(shí)時(shí)間。

執(zhí)行后發(fā)現(xiàn),my-api 請(qǐng)求仍然 3 秒后就拋出如下異常:

Caused by: feign.RetryableException: Read timed out executing POST http://my-api
 at feign.FeignException.errorExecuting(FeignException.java:67)
 at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:104)
 at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:76)
 at feign.hystrix.HystrixInvocationHandler$1.run(HystrixInvocationHandler.java:108)
 at com.netflix.hystrix.HystrixCommand$2.call(HystrixCommand.java:302)
 at com.netflix.hystrix.HystrixCommand$2.call(HystrixCommand.java:298)
 at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:46)

Feign Client的各種超時(shí)時(shí)間設(shè)置

在Spring Cloud微服務(wù)架構(gòu)中,大部分公司都是利用Open Feign進(jìn)行服務(wù)間的調(diào)用,而比較簡(jiǎn)單的業(yè)務(wù)使用默認(rèn)配置是不會(huì)有多大問(wèn)題的,但是如果是業(yè)務(wù)比較復(fù)雜,服務(wù)要進(jìn)行比較繁雜的業(yè)務(wù)計(jì)算,那后臺(tái)很有可能會(huì)出現(xiàn)Read Timeout這個(gè)異常,因此定制化配置超時(shí)時(shí)間就有必要了。

1. Feign Client Configuration

# 默認(rèn)開(kāi)啟
feign.httpclient.enabled=false
# 默認(rèn)關(guān)閉
feign.okhttp.enabled=true
# 默認(rèn)關(guān)閉
feign.hystrix.enabled=false
# 默認(rèn)關(guān)閉
feign.sentinel.enabled=true
# default context 連接超時(shí)時(shí)間
feign.client.config.default.connectTimeout = 5000
# default context 讀超時(shí)時(shí)間
feign.client.config.default.readTimeout = 10000
# 設(shè)置重試處理器,默認(rèn)直接拋出異常
# feign.client.config.default.retryer = Class<Retryer>
# 設(shè)置日志級(jí)別,默認(rèn)NONE
# feign.client.config.default.loggerLevel = FULL

2. Hystrix Configuration

# 全局設(shè)置超時(shí):
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 30000

hystrix在ribbon的外層處理。

3. Ribbon Configuration

# 連接超時(shí)時(shí)間,默認(rèn)為1秒,該值會(huì)被FeignClient配置connectTimeout覆蓋
ribbon.ConnectTimeout=5000
# 讀超時(shí)時(shí)間,默認(rèn)為1秒,該值會(huì)被FeignClient配置readTimeout覆蓋
ribbon.ReadTimeout=5000
# 最大重試次數(shù)
ribbon.MaxAutoRetries=1

當(dāng)Ribbon調(diào)用接口發(fā)送連接異?;蛘叱瑫r(shí)異常時(shí)會(huì)觸發(fā)Ribbon 的重試機(jī)制。

4. OkHttp Client Configuration

所設(shè)置的連接時(shí)間和超時(shí)時(shí)間最后會(huì)動(dòng)態(tài)設(shè)置到OkHttpClient中,最底層也就是Socket的連接時(shí)間和讀超時(shí)時(shí)間。也就是說(shuō),直接配置OkHttpClient是無(wú)效的。

解決方案:添加OkHttp Client的請(qǐng)求Interceptor,動(dòng)態(tài)設(shè)置超時(shí)時(shí)間。

@Bean("okHttpClient")
public OkHttpClient okHttpClient(ConnectionPool connectionPool) {
 return new OkHttpClient().newBuilder().connectionPool(connectionPool)
             // 改值在FeignClient體系中會(huì)被動(dòng)態(tài)覆蓋
   .connectTimeout(6, TimeUnit.SECONDS)
             // 改值在FeignClient體系中會(huì)被動(dòng)態(tài)覆蓋
   .readTimeout(VmcConstants.TEN_SECONDS, TimeUnit.SECONDS)
             // 添加攔截器,支持動(dòng)態(tài)設(shè)置超時(shí)時(shí)間
   .addInterceptor(new OkHttpClientDynamicTimeoutInterceptor())
            .eventListener(eventListener())
   .build();
}

5. 小結(jié)一下吧

1.如何配置好Hystrix和Ribbon的超時(shí)時(shí)間呢?

其實(shí)是有套路的,因?yàn)镕eign的請(qǐng)求:其實(shí)是Hystrix+Ribbon。Hystrix在最外層,然后再到Ribbon,最后里面的是http請(qǐng)求。所以說(shuō)。Hystrix的熔斷時(shí)間必須大于Ribbon的 ( ConnectTimeout + ReadTimeout )。而如果Ribbon開(kāi)啟了重試機(jī)制,還需要乘以對(duì)應(yīng)的重試次數(shù),保證在Ribbon里的請(qǐng)求還沒(méi)結(jié)束時(shí),Hystrix的熔斷時(shí)間不會(huì)超時(shí)。

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

相關(guān)文章

  • SpringBoot快速整合RabbitMq小案例(使用步驟)

    SpringBoot快速整合RabbitMq小案例(使用步驟)

    這篇文章主要介紹了SpringBoot快速整合RabbitMq小案例,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06
  • 詳解spring Boot 集成 Thymeleaf模板引擎實(shí)例

    詳解spring Boot 集成 Thymeleaf模板引擎實(shí)例

    本篇文章主要介紹了spring Boot 集成 Thymeleaf模板引擎實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • Java設(shè)計(jì)模式之外觀模式示例詳解

    Java設(shè)計(jì)模式之外觀模式示例詳解

    外觀模式為多個(gè)復(fù)雜的子系統(tǒng),提供了一個(gè)一致的界面,使得調(diào)用端只和這個(gè)接口發(fā)生調(diào)用,而無(wú)須關(guān)系這個(gè)子系統(tǒng)內(nèi)部的細(xì)節(jié)。本文將通過(guò)示例詳細(xì)為大家講解一下外觀模式,需要的可以參考一下
    2022-03-03
  • 簡(jiǎn)單易懂的Java Map數(shù)據(jù)添加指南

    簡(jiǎn)單易懂的Java Map數(shù)據(jù)添加指南

    Java提供了多種方法來(lái)往Map中添加數(shù)據(jù),開(kāi)發(fā)者可以根據(jù)具體需求選擇合適的方法,需要的朋友可以參考下
    2023-11-11
  • springboot整合jquery和bootstrap框架過(guò)程圖解

    springboot整合jquery和bootstrap框架過(guò)程圖解

    這篇文章主要介紹了springboot整合jquery和bootstrap框架過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Spring?依賴注入和循環(huán)依賴的實(shí)例解析

    Spring?依賴注入和循環(huán)依賴的實(shí)例解析

    依賴注入的主要目的是降低類之間的耦合度,使得代碼更加靈活、可維護(hù)和可測(cè)試,這篇文章主要介紹了Spring?依賴注入和循環(huán)依賴的相關(guān)知識(shí),需要的朋友可以參考下
    2023-09-09
  • springboot2.x只需兩步快速整合log4j2的方法

    springboot2.x只需兩步快速整合log4j2的方法

    這篇文章主要介紹了springboot2.x只需兩步快速整合log4j2的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • Java手動(dòng)創(chuàng)建線程池代碼實(shí)例

    Java手動(dòng)創(chuàng)建線程池代碼實(shí)例

    這篇文章主要介紹了Java手動(dòng)創(chuàng)建線程池代碼實(shí)例,FixedThreadPool或者SingleThreadPool,允許的請(qǐng)求隊(duì)列長(zhǎng)度為Integer.MAX_VALUE,可能會(huì)堆積大量的請(qǐng)求,從而導(dǎo)致OOM,需要的朋友可以參考下
    2023-12-12
  • Java從入門(mén)到起飛之?dāng)?shù)組使用詳解

    Java從入門(mén)到起飛之?dāng)?shù)組使用詳解

    這篇文章主要介紹了Java從入門(mén)到起飛之?dāng)?shù)組使用的相關(guān)資料,包括數(shù)組的聲明、初始化、長(zhǎng)度、索引、遍歷和默認(rèn)值等內(nèi)容,還介紹了Arrays工具類中常用的方法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-03-03
  • SpringCloud OpenFeign概述與使用

    SpringCloud OpenFeign概述與使用

    OpenFeign源于Netflix的Feign,是http通信的客戶端。屏蔽了網(wǎng)絡(luò)通信的細(xì)節(jié),直接面向接口的方式開(kāi)發(fā),讓開(kāi)發(fā)者感知不到網(wǎng)絡(luò)通信細(xì)節(jié)。所有遠(yuǎn)程調(diào)用,都像調(diào)用本地方法一樣完成
    2023-01-01

最新評(píng)論

霍城县| 湘乡市| 鲁甸县| 元氏县| 克什克腾旗| 卢湾区| 涞水县| 资源县| 郴州市| 册亨县| 安仁县| 四平市| 洛扎县| 丹寨县| 扶沟县| 洱源县| 临汾市| 金华市| 上虞市| 伊通| 桑植县| 大荔县| 四子王旗| 土默特左旗| 闽清县| 修水县| 重庆市| 武定县| 松江区| 北宁市| 梁河县| 石渠县| 商都县| 马龙县| 镇沅| 汤原县| 多伦县| 大化| 周口市| 中牟县| 儋州市|