Spring微服务搭建:个人踩坑和解决

68 阅读2分钟

在学习了微服务的基本概念和操作了一次JDK8、SpringBoot 2.3.9-RELEASE搭建微服务的过程后,笔者开始尝试将之前使用SpringBoot 3.3.13写的一个小项目拆分成多个微服务,版本不同导致踩了一些坑,这里分享一下踩过的坑以及解决方案。

项目信息

依赖/软件版本
JDK21
SpringBoot3.3.13
MyBatis3.0.4
MyBatisPlus3.5.7
SpringCloud2023.0.3
SpringCloudAlibaba2023.0.3.3
OpenFeign4.1.3
SpringCloudGateway4.1.5
Nacos2.4.2
MySQL8.0.40

踩坑一:依赖版本管理

给项目搭建微服务的时候依旧采用为使用JDK8的项目的相关依赖,导致启动服务时报错;后面才发觉不同的SpringBoot版本需要使用相应的依赖版本,于是查询Nacos官网的版本发布说明,获得如下信息:

Spring Cloud Alibaba VersionSpring Cloud VersionSpring Boot VersionNacos Version
2023.0.1.0*2023.0.13.2.42.3.2
2023.0.0.0-RC13.3.133.2.02.3.0

结合mvnrepository上找到的Spring Cloud Alibaba Dependencies的所有2023.x版本:

image.png 最终确定了各个依赖的版本;不过启动后还是出现了报错,在报错信息中注意到:

Caused by: java.lang.IllegalStateException: No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalancer?

查阅资料得知高版本SpringCloud将负载均衡依赖单独抽了出来,需要额外引入;引入spring-cloud-starter-loadbalancer后成功运行。

踩坑二:Feign不使用HttpClient

按照配置JDK8那个项目的做法,笔者尝试引入feign-httpclient依赖并修改application.yml,发现配置项不一样,并且在FeignClientFactoryBean类的断点调试显示的client.delegate仍然是Feign默认的而非HttpClient:

image.png

查阅资料后得知Spring Cloud OpenFeign从4开始不再支持Feign Apache HttpClient 4,需要换用5;引入 feign-hc5并配置application.yml后,成功使HttpClient生效:

spring:
  cloud:
    openfeign:
      httpclient:  #feign client使用 Apache HttpClient5
        hc5:
          enabled: true

image.png

踩坑三:网关配置

在成功启动所有微服务和网关后,Nacos控制台也能正常显示服务列表,但是访问后端微服务却显示503服务未找到:

image.png

发现在网关的application.yml中将各路由的uri配置为负载均衡的地址(lb://{项目名}),并且网关项目没有引入spring-cloud-starter-loadbalancer;和其他微服务模块不同,这里没有spring-cloud-starter-loadbalancer也没有在启动时直接报错,只在尝试访问后端时出现;引入负载均衡依赖后,问题解决。

结语

以上便是笔者搭建使用SpringBoot 3.3.13的微服务所遇到的一些问题,希望能对各位读者有所帮助。