springcloud-openfeign-hystrix 实现不同openfeign客户端使用不同线程池

配置文件增加配置
 

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);
    }


}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值