如何为OpenFeign覆盖Hystrix配置,可自定义线程池大小及单端点超时参数
SpringBoot + OpenFeign 场景下Hystrix自定义配置实现方案
目前公开的绝大多数相关文档都针对SpringBoot + OpenFeign技术栈,该场景下有Spring专属的配置覆写机制,以下方案可实现Hystrix配置自定义覆写,同时满足两个核心配置需求:客户端侧Hystrix核心线程池大小可配置、支持按单个接口端点设置超时时间。
1. 基础依赖与功能开启
首先确保项目引入OpenFeign与Hystrix的官方starter,以Maven为例:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency>
在项目配置文件中开启Feign的Hystrix支持:
feign: hystrix: enabled: true
2. 客户端侧全局Hystrix线程池配置
通过配置文件可直接覆写全局线程池核心参数:
hystrix: threadpool: default: coreSize: 20 # 自定义全局核心线程数,可根据业务压测结果调整 maximumSize: 50 # 可选配置,最大线程数 allowMaximumSizeToDivergeFromCoreSize: true # 必须开启该配置,maximumSize参数才会生效
3. 单接口端点独立超时配置
Spring Cloud OpenFeign场景下,Hystrix对单个Feign接口方法生成的默认命令Key规则为Feign接口类名#方法名(参数类型列表),按照该规则可针对单个接口单独配置超时时间,优先级高于全局配置:
hystrix: command: # 全局默认超时配置 default: execution: isolation: thread: timeoutInMilliseconds: 1000 # 全局默认超时时间为1s # 单个接口自定义超时配置,替换为实际业务对应的命令Key即可 UserFeignClient#getUserById(Long): execution: isolation: thread: timeoutInMilliseconds: 3000 # 该接口单独设置3s超时
若需要简化命令Key的命名规则,可自行实现HystrixCommandKey生成策略,通过自定义
Feign.Builder注入即可适配,默认命名规则已满足绝大多数场景的单接口配置需求。
内容的提问来源于stack exchange,提问作者Jared Petersen
相关产品推荐
相关产品推荐

