在微服务中,多线程异步+Feign调用会出现请求头丢失。
SpringCloud的微服务使用Feign进行服务间调用的时候可以使用RequestInterceptor统一拦截请求来完成设置header等相关请求,在这里我们一般会将主线程请求的请求头信息同步给子线程,但是当主线程请求先行结束的时候,子线程请求还未来得及同步请求头信息,这样从主线程请求中的请求信息会被清除,从而在RequestInterceptor中获取主线程请求头信息就是空的,从而设置到子线程中也是空的,也就是说会丢失请求头信息。
这里给出一个解决方案。
解决
- 在主线程中先获取请求头参数
- 传入子线程中
- 由子线程将请求头参数设置到上下文中
- 最后在Feign转发处理中拿到子线程设置的上下文的请求头数据,转发到下游。
具体代码查看: https://gitee.com/xiaojinggege/programming-questions
评论区