• Feign超时不生效问题


    使用Feign作为RPC调用组件,可以配置连接超时和读取超时两个参数


    使用Feign配置超时需要注意:Feign内部使用了负载均衡组件Ribbon,
    而Ribbon本身也有连接超时和读取超时相关配置
    一、默认不配置相关参数的情况下:


    通过测试发现超时读取使用了Ribbon的默认超时时间,即1s。此时Feign的默认超时时间
    60s不会生效。

    源码分析:Ribbon的默认超时时间 1s。 Feign的默认读取超时时间60s

     


    二、 配置相关参数的情况下:


    Fegin可以配置全局超时时间:
    feign.client.config.default.readTimeout=3000
    feign.client.config.default.connectTimeout=3000
    注意:如果只配置读超时,只feign.client.config.default.readTimeout=3000 是不会生效的
    要配置Feign读取超时,必须同时配置连接超时

    若是想针对单独的Feign Client(client-name)设置超时时间,可以把default替换为Client的name
    例如:
    feign.client.config.client-name.readTimeout=3000
    feign.client.config.client-name.connectTimeout=3000
    单独的超时可覆盖全局超时

    同时配置Feign和Ribbon的参数

    feign.client.config.default.readTimeout=3000
    feign.client.config.default.connectTimeout=3000
    ribbon.ReadTimeout=4000
    ribbon.ConnectTimeout=4000
    最终生效的是Feign的超时

    源码分析:同时配置Feign和Ribbon的超时,以Feign为准
    在LoadBalancerFeignClient源码
    如果Request.Options不是默认值,就会创建一个FeignOptionsClientConfig代替原来Ribbon的DefaultClientConfigImpl,导致Ribbon的配置被Feign覆盖

  • 相关阅读:
    ASP.NET MVC EF 连接数据库(一)-----Database First
    设计模式——策略模式
    设计模式——简单工厂模式
    分享一些技术大牛的博客
    有货双中心双活架构实践
    分布式协调服务Zookeeper应用场景
    分布式服务框架资料汇总
    Java线程池ThreadPoolExecutor解析
    服务注册中心Zookeeper和Eureka比较
    JVM内存结构、垃圾回收及性能调优
  • 原文地址:https://www.cnblogs.com/wa1l-E/p/13994240.html
Copyright © 2020-2023  润新知