弹性应用的开发利器Hystrix

Command线程池

线程池的键被用于监控HystrixThreadPool时的呈现,度量的发布,缓存等其它应用。一个HystrixCommand 是和一个单个的HystrixThreadPool相关联,通过注入它的HystrixThreadPoolKey可以取得HystrixThreadPool 或者它默认情况下用HystrixCommandGroupKey创建一个。

可以通过HystrixCommand 的构造器显式定义他的名字,

 public CommandHelloWorld(String name) {
        super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("ExampleGroup"))
                .andCommandKey(HystrixCommandKey.Factory.asKey("HelloWorld"))
                .andThreadPoolKey(HystrixThreadPoolKey.Factory.asKey("HelloWorldPool")));
        this.name = name;
    }

HystrixThreadPoolKey 是一个接口,可以通过枚举类或者正常的类实现。但是它也有帮助类工厂能够构建内部实例:

HystrixThreadPoolKey.Factory.asKey("HelloWorldPool")

不单纯使用HystrixCommandGroupKey,而是引入HystrixThreadPoolKey的原因主要是多个commands可能属于同一个所属组或逻辑功能。但是某些command可能需要彼此隔离。

简单的例子如下:

2个comand用于获取视频远数据组名是“VideoMetadata” command A 连接Cassandracommand B 连接memcached

假如command A 变的延迟或它的线程池饱和。它将不在阻止来着command B的执行请求。因为它们后端对应不同的资源。

因此,我们逻辑上让这些command分组在一起,但是又想让它们单独的隔离,通过使用HystrixThreadPoolKey给它们分配不同的线程池