在添加了hystrix熔断器后,默认使用线程池的隔离模式,会导致RequestContextHolder中获取不到request对象。

     请教大家一个问题,在feign的RequestInterceptor拦截器中,使用RequestContextHolder获取request对象,往header中放入request中的值。在服务端通过@RequestHeader拿到。 问题:在添加了hystrix熔断器后,默认使用线程池的隔离模式,会导致RequestContextHolder中获取不到request对象。有一个解决方案是:把隔离模式改为信号量模式(SEMAPHORE)才能正常获取。 现在不想使用信号量模式,请问大家有其他的解决方案吗?
已邀请:

gavin_guo

赞同来自: xujin xiaohb zhaohui

如果用THREAD策略,实际执行http通信的线程和调用feign的会在不同线程里,所以导致无法访问存在ThreadLocal的变量里。
我觉得两个办法:
1,把值存在多个线程都能访问到的Context中。但是需要设计存放的key,以及防止并发访问。
2,强制在feign中要求提供@RequestHeader的参数。

要回复问题请先登录注册