@FeignClient注解自定义接口超时时间

问题描述

  每个微服务都有统一的接口超时时间设定,但也存在一些特殊的业务场景,其接口需要较长的超时时间,比如:导出excel报表、上传文件、拉取业务报表数据等等。此时,默认的超时设置就不能满足需求,故需要设置各自的超时时间。

问题分析

  使用@FeignClient 时,可以通过contextId属性为不同的接口设置不同的超时时间,在config属性中指定某服务的超时时间即可。

feign:
    client:
        config:
            default:  // 所有服务级别设置,default为任意服务,可以指定调用某服务时的超时时间
                connectTimeout: 毫秒时间,建立连接的超时时间,一般只在发现服务时用到
                readTimeout: 毫秒时间 ,建立连接,从服务端读取到可用数据的超时时间
           remote-server-name: //contextId属性,指定调用remote-server-name服务时的超时时间
                connectTimeout: 200
                readTimeout: 3000

connectTimeout:单位毫秒,指定建立连接的超时时间,一般只在发现服务时用到。

readTimeout: 单位毫秒,建立连接后,从服务端读取到可用数据的超时时间。

  设置超时时间时,需要注意以下两点:

♥只设置connectTimeout或者readTimeout时,配置不生效,两个值必须同时设置。

♥feign默认的connectTimeout时长是10s,readTimeout时长是60s,上面配置的值会覆盖默认值。

问题解决

  把上述源码中的 remote-server-name 改为 remote-server-user,则在如下调用中,就设置了调用 remote-server-user 服务时的超时时间:

@FeignClient(value = "user",contextId ="remote-server-user")
public interface UserFeignService {

 @RequestMapping(value = { "/getUserById" })
 User getUserById(@RequestParam("userId") final Long userId);

}

小结

  工欲善其事,必先利其器。性能与效率是程序猿永恒的追求,对代码如此,对日常搬砖亦如此。Wiener只愿各位同仁Work Life Balance,效率高,错误少,回家早...

posted @ 2021-12-26 15:18  楼兰胡杨  阅读(3651)  评论(0编辑  收藏  举报