异步调用Feign接口空指针问题future.get() 报Null

1 篇文章 0 订阅
1 篇文章 0 订阅

异步调用Feign接口空指针问题原因:

Feign接口的Request 默认是主线程和子线程不共享的,当异步调用Feign接口会因为获取不到ServletRequestAttributes报空指针。

解决方案:
我们先获取到当前请求,再分享给子线程。
首先获取attributes

 RequestAttributes attributes = RequestContextHolder.getRequestAttributes();//防止fegin获取不到当前请求

在线程中设置attributes :

RequestContextHolder.setRequestAttributes(attributes);

实例代码:

ExecutorService executorService = Executors.newSingleThreadExecutor();
            List<ExportFamilyMasterImplForm> finalList = list;
            RequestAttributes attributes = RequestContextHolder.getRequestAttributes();//防止fegin获取不到当前请求
            executorService.execute(()->{
                RequestContextHolder.setRequestAttributes(attributes);
                List<ExportFamilyMasterForm>  excelList = familyMemberService.dataTransformation(finalList);
            });
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
这个错误通常是由于 Feign 客户端无法找到可用的服务实例导致的。下面是一些可能的解决方案: 1. 检查服务实例是否可用:确保 `account-voucher` 服务实例正在运行,并且已经成功注册到服务注册中心(如 Eureka、Consul 等)。可以通过访问服务实例的健康检查端点或者直接访问服务接口来验证服务是否可用。 2. 检查服务名称是否正确:确保 Feign 客户端中指定的服务名称与注册中心中的名称一致。如果服务名称不正确,Feign 客户端将无法找到对应的服务实例。 3. 检查负载均衡配置:如果使用了负载均衡器(如 Ribbon),请确保配置正确,并且已经指定了要负载均衡的服务。可以检查 Ribbon 的配置文件或者相关的注解配置。 4. 检查网络连接:确保应用程序能够与 `account-voucher` 服务进行正常的网络通信。可以尝试使用 `ping` 命令或者其他网络诊断工具检查网络连接是否正常。 5. 检查 Feign 客户端配置:检查 Feign 客户端的配置文件,确保没有配置错误。可以检查 Feign 的超时时间、重试次数等配置。 如果以上步骤都没有解决问题,可以尝试以下调试步骤: 1. 查看服务注册中心:检查服务注册中心中是否有 `account-voucher` 的实例注册成功。 2. 查看 Feign 客户端的日志:启用 Feign 客户端的详细日志输出,查看是否有其他错误信息或异常栈轨迹。 3. 使用其他方式进行调用:尝试直接使用 RestTemplate 或其他方式调用 `account-voucher` 服务,看是否能够成功连接。 希望这些解决方案能够帮助你解决问题!如果还有其他疑问,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值