Spring Cloud中Hystrix 线程隔离导致ThreadLocal数据丢失问题分析

最近spring boot项目中由于使用了spring cloud 的hystrix 导致了threadLocal中数据丢失,其实具体也没有使用hystrix,但是显示的把他打开了,导致了此问题。

导致此问题的代码逻辑如下:服务之间的调用采用的feignclient,采用feignclient拦截器获取上游设置到threadlocal中的数据。

@Slf4j
public class TenantSupportInterceptor implements RequestInterceptor {


    public void apply(RequestTemplate template) {
        String tenantNo = Optional.ofNullable(LocalHolder.getTenantNo());
        template.header(CommonConstants.TENANT_NO, tenantNo);
    }

}
public final class LocalHolder {

    private LocalHolder() {
    }

    private static final InheritableThreadLocal<String> TENANT_NO_THREADLOCAL = new InheritableThreadLocal<>();

    public static void setTenantNo(String tenantNo) {
        TENANT_NO_THREADLOCAL.set(tenantNo);
    }

    public static String getTenantNo() {
        return TENANT_NO_THREADLOCAL.get();
    }

    public static void removeTenantNo() {
        TENANT_NO_THREADLOCAL.remove();
    }
}

具体为什么采用InheritableThreadLocal下文有说明。

但是有时候就拿不到。经过排查,这两边的线程发生了变化,导致取不到值。导致线程发生变化的原因是显示的声明了hystrix为true。

 

 只需要把这个设置成false就好。

但是如果项目中真真的是用了hystrix呢?

引用一下文档进行说明:

https://mp.weixin.qq.com/s?__biz=MzIwMDY0Nzk2Mw==&mid=2650319274&idx=1&sn=0a5bf8ef9148ba8562e0e1c58038da98&chksm=8ef5fddeb98274c8a88522c56050b5e5c7f6d510c5345cec795a130d3abd2b53a16513f578ce&scene=21#wechat_redirect

https://cloud.tencent.com/developer/article/1082737

 

转载于:https://www.cnblogs.com/baizhanshi/p/11176343.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值