Hystrix线程池的划分

通过简单了解Hystrix的舱壁隔离这篇博文,可以了解到划分独立线程池是Hystrix实现舱壁隔离的手段之一。

怎么划分线程池

  • 以继承方式实现的 Hystrix 命令使用类,在该类的构造函数里划分线程池
  • 用注解的方式划分线程池

以继承方式实现的 Hystrix 命令使用类,在该类的构造函数里划分线程池

public class DemoCommand extends HystrixCommand {

    public DemoCommand() {
        super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("group1"))
                .andCommandKey(HystrixCommandKey.Factory.asKey("democomand"))
                .andThreadPoolKey(HystrixThreadPoolKey.Factory.asKey("demo")));
    }
  1. Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey(“group1”)
    这步是为了设置组名,在没有做更细粒度的线程池划分的时候,Hystrix会让组名相同的命令使用同一个线程池。

  2. andCommandKey(HystrixCommandKey.Factory.asKey(“democomand”))
    这步是设置命令名称,没有设置的话默认用的是类名

  3. .andThreadPoolKey(HystrixThreadPoolKey.Factory.asKey(“demo”)));
    这步做了更细粒度的线程池划分,使用起来更加灵活,建议尽量使用这个方式来划分线程池

用注解的方式划分线程池

 @HystrixCommand(groupKey = "group1", commandKey = "democomand", threadPoolKey = "demo")
    public User democomand(String name) throws Exception {
        。。。
    }
发布了136 篇原创文章 · 获赞 109 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_38106322/article/details/103968561