调用feign返回错误的数据

9 篇文章 0 订阅
5 篇文章 0 订阅

bug描述:

在一个请求方法中会调用到feign去获取其他的数据。

List<Demo> list = aaaFeignApi.getData(personSelectGetParam);

在调用的时候,打断点到feign的地方,数据是存在的,并且有15条。但是返回到上面代码的时候数据就没了。

下面的代码是上面的feign调用的具体代码,下面的代码返回了15条数据。但是返回到上面的list就没了

List<Demo> list = aaaService.getData(param);

上面的是伪代码,下面的是真实业务场景。

方法执行的结果是15条数据,返回到变量里面就没了。

在这里插入图片描述
在看看结果:
在这里插入图片描述

项目背景:

这个项目使用的是springbootfeign调用的是另外一个模块里面的接口。

使用nacosjekins部署服务,

这个feign是很早以前就已经写好了,现在需要对其功能进行一些修改。

所有就改了aaaService 所调用的mapper 里面的sql语句,

没改之前的sql查出来的是0条。

改了之后的sql查出来的数据是15条。

解决方法:

问题出现的原因:

调用的feign使用nacos里面注册的feign地址,由于我们修改的代码只是在本地修改了,并没有推到开发环境。所以它的请求是转发到服务器的IP地址去了,所以这个feign请求的数据是通过以前的旧sql 返回的数据。

为什么本地idea代码debug会出现返回的数据有15条,可能是idea的优化,将请求在本地模拟了的原因,实际的请求本没有打到本地的服务器,而是打到了nacos注册的其他服务器。虽然咱启动了服务也注册到了nacos,但是不知道为什么这个feign的请求就是不能打到本地。

解决:指定服务名称即可。

将这个名字指定为自己特殊的名字 aaa ,并且修改yml里面自己服务的名字 aaa,让这两个服务名对应起来。feign调用的请求就会打到本地的服务里面。

本地的服务是你修改了的最新代码,没有提交到服务器里面的。

@FeignClient(name = "aaa", fallback = aaaSupport.class)
spring:
  application:
    name: aaa

总结:

造成这个bug的根本原因就是因为我不知道feign调用的到底是那个服务器的代码。

这个feign请求一直请求到了远程其他服务器的旧代码,所以查不到数据。

如果我们指定了feign的请求服务名,并且把我们的服务名改为对应的服务名就可以指定feign的请求精确的请求到本地的修改测试的代码中来。

参考文章列表:

  1. 没有参考文章,自己调试出来。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
如果在RabbitListener中调用Feign时出现NullPointerException,可能是由于Feign的实例未能正确注入导致的。 请检查以下几个方面: 1. 确保你在RabbitMQ消费者类(即RabbitListener所在的类)上使用了@Component或@Service等注解,以便将其纳入Spring容器的管理。 2. 确保Feign的相关依赖已经正确添加,并且Feign的配置文件(如application.properties或application.yml)已经正确配置。 3. 确保Feign的接口定义正确,包括方法名、参数列表和返回类型等。可以尝试在RabbitListener方法中打印一些日志,检查Feign实例是否为null,或者尝试调用其他Feign接口方法,看是否能正常返回数据。 4. 如果以上步骤都没有问题,可以尝试使用@Autowired或@Resource等注解将Feign的实例直接注入到RabbitMQ消费者类中。在RabbitListener方法中直接使用注入的Feign实例进行调用。 示例代码如下: ```java import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public class RabbitMQConsumer { @Autowired private YourFeignClient feignClient; @RabbitListener(queues = "your-queue") public void handleMessage(String message) { // 调用Feign接口 feignClient.yourMethod(); } } ``` 如果以上方法仍然无法解决问题,请提供更多的错误信息和代码,以便我们更好地帮助你解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dlage

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值