Hystrix的线程上下文隔离策略

1.默认情况下为 THRED
Hystirx调用的命令(注解保护的服务调用)都只在一个单独的线程池中运行(默认为Java线程池或为该Hystrix调用设置的线程池)是一个子线程,不与父线程共享彼此中独有数据
2.SEMAPHORE
由于@HystrixCommand注解保护不需要启动一个新线程(不明白),当线程调用超时,父线程中断,导致抛出无法捕获的异常,一般不用.
@HystirxCommand(
commandProperties={
@HystirxProperty=(name=“execution.isoation.strategy”,value=“SMEAPHORE”)})

但是当使用隔离级别为THRED是由于子父线程间无法共享(线程上下文)彼此数据,所以在调用下一级时无法将上级的数据传递给下一级.

解决方案:HystrixConcurrentStrategy-----可将Hystrix的父线程上下文传递到下级
实现方式
1.自定义HystrixConcurrentStrategy并发策略类继承默认策略类HystrixoncurrentStrategy,Hystrix只允许有一个并发策略类,但是spring cloud 允许将并发策略类链接,只需要将其插入到Hystrix并发策略配置信息中,重写父类所有方法,在wrapCallable方法中调用父类方法,传递一个已经实现callable接口的对象—已子类参数callable和保存上下文传递的数据的对象为构造参数
2.自定义一个实现Callable的类—执行线程上下文传播到Hystrix命令中
该类会在调用Hyxtrix保护的方法调用时创建,并调用call()方法
类的结构:
2.1构造方法初始化数据,
2.2重写call()方法
2.2.1实现数据传递到ThreadLocal中
2.2.2并调用父类的call(),调用之后会调用@HystrixCommand注解保护的方法
3.配置springcloud使用自定义Hystrix并发策略
定义一个配置类,将HrytrixConcurrentStrategy并发策略实现类重新到Hystrix插件中,且只能注册一个并发策略

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值