feign异步丢失上下文

场景:

在主线程里面开启异步查询,feign远程调用其他服务,不能拿到主线程的上下文,拦截器

feign异步丢失上下文_第1张图片

feign拦截器代码

feign异步丢失上下文_第2张图片

解决:

拿到主线程的上下文,塞到各个子线程中

//TODO :获取当前线程请求头信息(解决Feign异步调用丢失请求头问题)
        RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();

        //开启第一个异步任务
        CompletableFuture addressFuture = CompletableFuture.runAsync(() -> {

            //每一个线程都来共享之前的请求数据
            RequestContextHolder.setRequestAttributes(requestAttributes);

            //1、远程查询所有的收获地址列表
            List address = memberFeignService.getAddress(memberResponseVo.getId());
            confirmVo.setMemberAddressVos(address);
        }, threadPoolExecutor);

你可能感兴趣的:(java,spring,spring,boot)