问题场景:A服务请求B服务,B服务直接响应A服务,并且使用异步处理业务调用C服务,每个服务都需要通过token获取用户信息,发现B服务请求到C服务时,token并没有带过来,导致程序异常
解决方案:
1.在创建异步线程之前加入RequestContextHolder.setRequestAttributes(RequestContextHolder.getRequestAttributes(),true);设置主线程请求属性共享给子线程
然后断点进入异步方法看Request里面正常有值,正常跑的时候还是没有获取到token值,后面发现原来主线程执行完了,子线程的Request参数也被销毁了.
2.最后决定用ThreadLocal来做,在调用异步方法时把token传递过去,在异步方法里面把token放到ThreadLocal里面,然后在feign调用前取出来赋值进去