Hystrix 超时配置的N种玩法

猿天地 2019-05-28 21:37:32

前阵子在我的知识星球中,有位朋友对我提了个问题,问我如何让Hystrix支持对接口级别的超时配置,今天给大家写篇文章,普及一下Hystrix配置超时的几种方式。

至于以后你是用阿里的Sentinel还是Netflix Hystrix我就不管了,但今天的主题还是Netflix Hystrix,至少目前还是有很多在使用的,所以今天这篇文章还是看看吧。

@HystrixCommand

如果我们使用的是@HystrixCommand注解,那么可以在注解中直接指定超时时间,如下:

Hystrix 超时配置的N种玩法

 

当然也可以指定commandKey,然后在配置文件中配置超时时间,如下:

Hystrix 超时配置的N种玩法

 

配置文件给commandKey配置超时时间

Hystrix 超时配置的N种玩法

 

全局配置

如果只是想全局的配置,可以配置默认的超时时间:

Hystrix 超时配置的N种玩法

 

接口级别配置

假如我们的Feign Client定义如下:

Hystrix 超时配置的N种玩法

 

那么配置如下:

Hystrix 超时配置的N种玩法

 

为什么要配置成上面的方式呢?

其实就是对commandKey进行配置,只要我们知道commandKey的生成规则就可以对接口级别进行配置,接口级别的规则是 Client名称#方法名(参数类型)

源码在feign.hystrix.SetterFactory.Default中:

Hystrix 超时配置的N种玩法

 

服务级别配置

1.在Zuul中针对服务级别的话,直接配置service-id,如下:

Hystrix 超时配置的N种玩法

 

Zuul中之所以要配置service-id原因是commandKey就是用的service-id, 通过源码分析可以得到结论。

首先进入的是RibbonRoutingFilter中的run方法,然后我们看核心的forward方法:

Hystrix 超时配置的N种玩法

 

在forward中有下面的代码:

Hystrix 超时配置的N种玩法

 

通过create可以定位到具体的实现,这边就看你用的什么Http客户端,默认有三种实现,默认定位到org.springframework.cloud.netflix.zuul.filters.route.apache.HttpClientRibbonCommandFactory.create(RibbonCommandContext)方法。

 

Hystrix 超时配置的N种玩法

 

 

重点在new HttpClientRibbonCommand这行代码,第一个参数就是serviceId,我们看下HttpClientRibbonCommand构造函数的完整参数:

 

Hystrix 超时配置的N种玩法

 

 

所以service-id就是commandKey。

2.在Feign中针对服务级别的话,需要对commandKey进行定制,可以用service-id, 也可以用Feign Client Name,如下:

Hystrix 超时配置的N种玩法

 

  • .andCommandKey(HystrixCommandKey.Factory.asKey(commandKey))
  • 默认的接口方式
  • .andCommandKey(HystrixCommandKey.Factory.asKey(groupKey))
  • service-id方式
  • .andCommandKey(HystrixCommandKey.Factory.asKey(target.type().getSimpleName()));
  • Feign Client Name方式

配置的话根据不同的配置填写不通的commandKey就可以了:

Hystrix 超时配置的N种玩法

 

留一个问题大家思考下,欢迎留言讨论:

如果我们定制commandKey,也就意味着在使用Feign调用的时候,只能支持一种超时配置,要么默认的接口级别,要么自定义的服务级别。那么有没有什么方式能够让两种同时支持呢?

Hystrix 超时配置的N种玩法

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值