springcloud FeignCilent超时设置

方案一:Ribbon超时设置

feign是集成ribbon的,默认是用的ribbon的超时时间1s。我们可以通过在调用者的配置文件中修改ribbon默认超时时间:

#请求处理的超时时间
ribbon:
  #指的是建立连接后从服务器读取到可用资源所用的时间
  ReadTimeout: 2000
  #指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间
  ConnectTimeout: 2000

方案二:Feign超时设置

注意:Feign超时设置会覆盖ribbon超时时间。

  • 全局配置,对使用FeignClient的微服务生效
feign:
  client:
    config:
      default:
        connectTimeout: 10000 #单位毫秒
        readTimeout: 10000 #单位毫秒
  • 指定微服务配置,将default替换成具体微服务名称:即对指定微服务生效,例如commodity-service
feign:
  client:
    config:
      commodity-service:
        connectTimeout: 10000 #单位毫秒
        readTimeout: 10000 #单位毫秒
  • 指定微服务中指定方法或方法集设置超时时间

举例:商品服务调用交易服务中的getOrderById方法经常超时,只想对这个方法设置超时时间,但是不影响全局配置超时时间。在实际项目中一个微服务会有多个FeignClient,我们需要对每个FeignClient设置别名,标识全局唯一性,利用@FeignClient的属性contextId设置:如图

@FeignClient(
        contextId = "remoteOrderService",
        value = ServiceNameConstants.DEAL_SERVICE,
        fallbackFactory = RemoteOrderServiceFallbackFactory.class
)
public interface RemoteOrderService {

    @GetMapping("/v1/deal-order/{id}")
    R<Order> getOrderById(@PathVariable("id") Long id);
}

当一个微服务会有多个FeignClient,不设置别名会报错:如图

Description:
The bean 'deal-service.FeignClientSpecification', defined in null, could not be registered. A bean with that name has already been defined in null and overriding is disabled.
Action:
Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true

虽然可以设置spring.main.allow-bean-definition-overriding=true,来允许出现beanName一样的BeanDefinition,但是不推荐。
因此针对某个方法设置超时时间,如图(注意:配置必须在调用者且是优先级高的的配置文件中

##自定义feign client超时时间
feign:
  client:
    config:
      #对应feign client的contextId
      remoteOrderService:
        connectTimeout: 10000
        readTimeout: 3000

在springcloud项目中有config server(配置中心),在基于本地项目存储配置文件的配置信息优先级问题:如图
在这里插入图片描述
本项目gitee地址:springcloud-demo

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值