您现在的位置是:首页 >技术教程 >Hystrix Feign Ribbon设置单独接口的超时时间网站首页技术教程

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

symop 2023-05-23 16:00:02
简介hystrix 设置超时时间

一、问题描述

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

二、解决方案

注:以下方案是根据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。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。