线程池的键被用于监控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给它们分配不同的线程池