配置文件增加配置
feign: circuitbreaker: group: enabled: true
hystrix: thread-pool: default: coreSize: 10 maximumSize: 20 maxQueueSize: 500 #私有线程池配置,customerFeign客户端的contextId customerFeign: coreSize: 20 maximumSize: 20 maxQueueSize: 200
代码
@Component public class MyHystrixCircuitBreakerFactory extends HystrixCircuitBreakerFactory { @Autowired Environment environment; public HystrixCircuitBreaker create(String id, String groupName) { Assert.hasText(id, "A CircuitBreaker must have an id."); HystrixCommand.Setter setter;
// 从配置文件获取配置信息,判断是否定义私有线程池配置 String coreSize = environment.getProperty(StrUtil.format("hystrix.thread-pool.{}.coreSize", groupName)); if (StrUtil.isBlank(coreSize)) { setter = getConfigurations().computeIfAbsent(id, t -> HystrixCommand.Setter .withGroupKey( HystrixCommandGroupKey.Factory.asKey(getClass().getSimpleName())) .andCommandKey(HystrixCommandKey.Factory.asKey(t))); } else { String maximumSize = environment.getProperty(StrUtil.format("hystrix.thread-pool.{}.maximumSize", groupName)); String maxQueueSize = environment.getProperty(StrUtil.format("hystrix.thread-pool.{}.maxQueueSize", groupName)); HystrixThreadPoolProperties.Setter threadPoolPropertiesDefaults = HystrixThreadPoolProperties.Setter(); threadPoolPropertiesDefaults.withCoreSize(Integer.valueOf(coreSize)); if(StrUtil.isNotBlank(maximumSize)){ threadPoolPropertiesDefaults.withMaximumSize(Integer.valueOf(maximumSize)); } if(StrUtil.isNotBlank(maxQueueSize)){ threadPoolPropertiesDefaults.withMaxQueueSize(Integer.valueOf(maxQueueSize)); } setter = getConfigurations().computeIfAbsent(id, t -> HystrixCommand.Setter .withGroupKey( HystrixCommandGroupKey.Factory.asKey(groupName)) .andCommandKey(HystrixCommandKey.Factory.asKey(t))).andThreadPoolPropertiesDefaults(threadPoolPropertiesDefaults); } return new HystrixCircuitBreaker(setter); } }