ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

feign异步调用丢失上下文

2021-07-31 12:32:45  阅读:309  来源: 互联网

标签:异步 feign 调用 requestAttributes param 上下文 customerId


微服务架构下,通过feign进行服务间的调用。但是某些场景下,为了用户体验,及时响应,某些耗时的附加操作需要开启异步任务来调用,但是在这种异步调用方式下,可能会存在上下文丢失的情况。
请添加图片描述

解决方案:

  1. 将主方法的上下文作为参数传入

    • 主方法
      /**
         * 导入数据
         *
         * @param file
         * @param customerId
         * @return
         */
        @Override
        public void listImport(MultipartFile file, Long customerId) {  
            //获取主方法上下文
    		RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
            asyncService.importCar(customerId,fileName,requestAttributes);
           }
    
    • 异步方法
        /**
         * 异步任务,导入车辆数据
         * @param vehicleInfoReqs
         * @param customerId
         */
        @Async
        public void importCar( Long customerId, String fileName,RequestAttributes requestAttributes) {
             //将传入的上下文设置进去
            RequestContextHolder.setRequestAttributes(requestAttributes);
            vehicleControllerFeignClient.getVehicleByCarNoList(carNos);
        }
    
    1. 手动设置上下文(在feign调用前加上这行代码)
     //补全请求上下文
    RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(new MockHttpServletRequest()));
    

标签:异步,feign,调用,requestAttributes,param,上下文,customerId
来源: https://blog.csdn.net/V_A_L/article/details/119273843

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有