feign 请求调用线程之间的信息丢失的问题

最近在工作中遇到了一个这样的问题,情景如下:

    在微服务两个实例直接调用的时候会打印出一些日志但是发现这些日志的log_id变了,正常来说应该是保持一致的,实例A调用B的时候发现log_id是一致的,但是实例B调用A就不一致了,后来调试了一下发现问题出在断路器-Hystrix 的隔离策略上,原来A的隔离策略是信号量隔离(SEMAPHORE),B的隔离策略是线程池隔离(THREAD),并且默认的是线程池隔离,而线程池隔离的原理就是feign 请求会由Hystrix的线程池来进行请求也就是说携带着log_id的线程和真正调用feign的线程并不是一个线程!所以不管是写在header里面的log_id还是线程本身携带的ThreadLocal都会丢失,要解决这个问题有两个方案:

1.修改 Hystrix 策略为信号量隔离
2.扩展Hystrix线程池隔离支持线程之间信息传递 extends HystrixConcurrencyStrategy

我选择的是修改策略为信号量隔离,果然修改过后就可以携带log_id了。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值