我们知道Hystrix会对请求进行封装,然后管理请求的调用,从而实现断路器等多种功能。
Hystrix提供了两种隔离模式来进行请求的操作:
一种是信号量 一种是线程隔离
信号量:
则Hystrix在请求的时候会获取到一 个信号量,如果成功拿到,则继续进行请求,请求在一 个线程中执行完毕。
线程隔离
Hystrix会把请求 放入线程池中执行,这时就有可能产生线程的变化,从 而导致线程1的上下文数据在线程2里不能正常拿到。
新建请求接口和本地线程持有对象
建立一个ThreadLocal来保存用户的信息,通常在 微服务里,会把当前请求的上下文数据放入本地线程变 量,便于方便使用及销毁,
这里定义一个接口,做两件事:
1)请求入口打印当前线程ID,并利用上面的 ThreadLocal放入用户信息。
2)为了兼容其他情况,在使用Feign调用的时候, 通常会使用RequestContextHolder拿到上下文属性。