SpringBoot单体服务大家已经见怪不怪了,在本人之前的博文中介绍得相当之多。但是当我们对项目深入开发,项目的多种微服务并行,难免会出现跨服务调用接口方法的业务场景。大家有无在跨服务调用的时候踩坑?IDEA调试的时候一直给你报“ERROR 404 Service not find”?当然是有的,为了给后面的小伙伴们避坑,我将我踩的坑的两种情况拿来给大家分享一下:
(1)@RequestMapping路径问题
这个问题总归揭底也不算是很严重的问题,但是一旦是我们稍不注意,或者平时开发的时候粗心大意,这种情况就很难避免,即便是开发了很多年的老同事也是常犯这种错误,导致我们最终的服务调不到。
举个实例:我们的调用服务时,其实在添加的路径就是其服务的Controller层的url,如下所示:
@Controller
@RequestMapping("/demo/modal")
public class DemoDialogController
{
private String prefix = "demo/modal";
/**
* 模态窗口
*/
@GetMapping("/dialog")
public String dialog()
{
return prefix + "/dialog";
}
如果想要调用此服务中的dialog方法,那么所需的路径信息即为:“/demo/modal/dialog”,假设我们在调取服务时遗漏或者增加了路径中的信息,如在@RequestMapping()括号内写的为:“/demo/dialog” 或者 “/demo/demo/modal/dialog”,那么服务将是永远都找不到的,这就是路径错误导致最终报“404”服务找不到的问题。
(2)bootstrap.yml中服务地址配置问题
在开发中,涉及到多个微服务,企业中会开启nacos服务,而且为了不占用远程服务的端口号,往往我们会在本地启用和远程nacos相同的微服务以避免占用同一端口号,这个是我的前辈教给我非常规范的开发流程,之后的工作本人都是延续着这一做法来编写业务代码的。
其实也可建议不占用端口号的方法,即不在本地配置nacos的方法,改变掉其所启动服务的端口号,但这个不便于所有的服务进行调试,前面用本地的nacos可以达到一劳永逸的效果。
当然我是出现了本地nacos找不到不服务的时候才阐述这一问题,企业开发项目很大也很杂,并不是每一个模块都是需要自己去涉及到,往往需要跨服务调用时,你后续会发现在别人启动的模块中,并不是启用的本地nacos的服务地址,那么这种情况下也是调用不到远程服务的,这个看似微小的问题,稍不注意,可能折腾你半天或者一天的时间,因为本身服务是没有问题的。只需要将远程服务器端的nacos服务配置到本地当中,然后再bootstrap.yml配置文件中修改服务地址即可,如有需要后续将介绍一下如何在本地配置nacos服务,这个部分不是很难,大家也可以先查阅一下其他博主写的文章,也是阐述得非常详细的。
如下所示:将服务注册地址和配置中心地址改成本地地址即可,端口号与服务器端口号一致也不会导致端口号冲突问题。
cloud:
nacos:
discovery:
# 服务注册地址
server-addr: 127.0.0.1:8848
config:
# 配置中心地址
server-addr: 127.0.0.1:8848
# 配置文件格式
file-extension: yml
# 共享配置
shared-configs:
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
以上是本人再项目开发中遇到的两个跨服务调用时找不到服务所遇到的问题和解决办法,也希望能帮助到您解决其相关的问题,避免踩坑,早日完成开发任务呀!
路过的小伙伴,如果博文有帮助到你解决问题,可以点赞+收藏+关注一波呀~本人将会持续更新相关学习博文,感谢您的支持哦!!!