使用@Asycn时,方法中含有openFeign的调用方法,无法转发请求头信息

来源:10-7 异步入库商品服务功能实现

台风来临的那一夜

2021-10-19

老师,你好,我在使用@Asycn时,如果方法中含有openFeign的调用方法,无法转发请求头信息到另外一个微服务中,要怎么做才能实现满足这一需求呢?

@Configuration
public class FeignConfiguration implements RequestInterceptor {
    @Override
    public void apply(RequestTemplate requestTemplate) {
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder
                .getRequestAttributes();
        if (attributes != null) {
            HttpServletRequest request = attributes.getRequest();
            Enumeration<String> headerNames = request.getHeaderNames();
            if (headerNames != null) {
                while (headerNames.hasMoreElements()) {
                    String name = headerNames.nextElement();
                    String values = request.getHeader(name);
                    // 跳过 content-length
                    if (name.equals("content-length")){
                        continue;
                    }
                    if(name.equals("content-type")){
                        continue;
                    }
                    requestTemplate.header(name, values);
                }
            }
        }
    }
}
写回答

1回答

张勤一

2021-10-20

同学你好:

    其实丢失 header 的原因很简单,因为你使用了 @Async 注解,会使用一个新的线程发送请求,那么,原来线程的信息就丢失了。可以参考下这篇文章中的解决方案:https://blog.csdn.net/MarkusZhang/article/details/107888599

3
0

Spring Cloud / Alibaba 微服务架构实战

从架构设计到开发实践,手把手实现

1210 学习 · 674 问题

查看课程