bug描述:
在一个请求方法中会调用到feign
去获取其他的数据。
List<Demo> list = aaaFeignApi.getData(personSelectGetParam);
在调用的时候,打断点到feign
的地方,数据是存在的,并且有15
条。但是返回到上面代码的时候数据就没了。
下面的代码是上面的feign
调用的具体代码,下面的代码返回了15
条数据。但是返回到上面的list就没了
List<Demo> list = aaaService.getData(param);
上面的是伪代码,下面的是真实业务场景。
方法执行的结果是15
条数据,返回到变量里面就没了。
在看看结果:
项目背景:
这个项目使用的是springboot
,feign
调用的是另外一个模块里面的接口。
使用nacos
、jekins
部署服务,
这个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的请求精确的请求到本地的修改测试的代码中来。
参考文章列表:
- 没有参考文章,自己调试出来。