Hystrix Feign Ribbon设置单独接口的超时时间

一、问题描述

如果我们线上有一些方法需要单独设置超时时间,比如:批量处理任务,上传文件等。

二、解决方案

注:以下方案是根据openfegin10.2版本,不同版本可能会有所不同,请自行测试。

1、第一步先了解下Hystrix Feign Ribbon超时时间关系

1)、若不设置了Hystrix,Feign 和 Ribbon 的超时时间,则这三个默认都是1s,而Ribbon重试机制不会触发。

2)、若设置了Hystrix的超时时间,不设置Feign 和 Ribbon 的超时时间,则以hystrix的超时时间为准,而Ribbon重试机制不会触发。

3)、若设置了Feign 和 Ribbon 的超时时间只会有一个生效,规则:如果没有设置过 Feign 超时,也就是等于默认值的时候,就会读取 Ribbon 的配置,使用 ribbon 的超时时间和重试设置。否则使用 Feign 自身的设置。两者是二选一的,且 feign 优先。一般来说,会设置 Feign或Ribbon 的超时时间 < Hystrix,若超出了Feign或者ribbon 的超时限制,或者 超出了Hystrix 的超时限制,那么就会熔断。

2、解决方案

1)、若只设置了Hystrix的超时时间,不设置Feign 和 Ribbon 的超时时间,则可以用以下方式设置单个接口超时时间。

hystrix:
    类名#方法名(参数类型):
      execution:
        timeout:
          enabled: true
        isolation:
          thread:
            timeoutInMilliseconds: 超时时间

2)、若设置了Feign的超时时间(需小于Hystrix超时时间),则可以用以下方式设置单个接口超时时间。

@FeignClient(value = "微服务名", contextId = "唯一标识")
public interface TestFeign {}

配置如下:

feign:
  client:
    config:
      唯一标识:
        connectTimeout: 连接超时时间
        readTimeout: 读取超时时间

注:contextId唯一标识,当一个微服务中存在多个FeignClient接口调用同一个服务提供者时的场景(若是不提供该属性值,则在程序启动时会启动报错) ,一定要使用注解@EnableFeignClients,开启Feign。

2)、若设置了Ribbon的超时时间(需小于Hystrix超时时间),则可以用以下方式设置单个接口超时时间。

@FeignClient(value = "微服务名", contextId = "唯一标识")
@RibbonClient(name = "客户端唯一标识")
public interface TestFeign {}

配置如下:

ribbon客户端唯一标识:
  ribbon:
    ConnectTimeout: 连接超时时间
    ReadTimeout: 读取超时时间

注:若存在多个RibbonClient名称相同的name,则启动报错,一定要使用注解@RibbonClient ,开启Ribbon。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值