九、Hystrix线程池

Hystrix把服务调用统称为依赖调用,Hystrix通过命令模式封装依赖调用,每一个依赖调用封装在HystrixCommand中,每个命令在Hystrix的线程池中运行。另外可以对其配置分组名、线程组,使得不同的依赖可以分类在不同的线程组,隔离不同模块的依赖,也可根据负载情况,配置不同组的线程数。

命令名称HystrixCommandKey
HystrixCommand的名字,比如可以是某远程服务名,如查询购物车、查询订单等。如果不设置这个名字,Hystrix会为其设置默认的名字:类名。

命令分组HystrixCommandGroupKey
通过设置命令组,Hystrix会根据组来组织和统计命令的告警、仪表盘等信息。一定要设置命令组,因为除了根据组为统计单位外,如果当未设置HystrixThreadPoolKey值时,Hystrix会让相同组名的线程使用同一个线程池,因此需要在创建Hystrix命令时为其指定命令组名来实现默认的线程池划分。

线程池HystrixThreadPoolKey
ThreadPoolKey是HystrixCommand运行所在的线程池,如果该参数不设置则使用GroupKey作为ThreadPoolKey,这种情况下往往是同一个业务模块的依赖调用在同一个线程池内,比如使用服务模块[user,order,product等]作为GroupKey,此时如果同一业务内的服务之间还需要隔离的话,就可以设置该参数,比如order的订单和购物车可以通过设置不同的ThreadPoolKey再区分到不同线程池中,这在应对高并发时可以带来较好的效果,因为订单某些查询时比较慢的,如果和购物车放在同一个线程池回影响购物车的速率,同时也可以把下单接口单独隔离。

例如:


Hystrix内部是将创建好的线程池(即HystrixThreadPoolDefault内部封装了ThreadPoolExecutor的实例)是被放入到ConcurrentHashMap中:
final static ConcurrentHashMap<String, HystrixThreadPool> threadPools = new ConcurrentHashMap<String,HystrixThreadPool>();

threadPools.put(HystrixThreadPoolKey,new HystrixThreadPoolDefault(HystrixThreadPoolKey,propertiesBuilder));

具体流程如下图:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值