spring boot 本身不提供微服务治理能力,需结合 spring cloud 等方案补全服务发现、负载均衡、熔断、配置中心等关键能力;单个服务应先用 spring-boot-starter-web 和 @restcontroller 快速暴露 http 接口,再逐步集成注册中心与远程调用组件。

Spring Boot 本身不提供微服务治理能力,直接用它“构建微服务”会漏掉服务发现、负载均衡、熔断、配置中心等关键环节。真正可行的路径是:用 Spring Boot 快速搭建单个服务模块,再通过 Spring Cloud(或替代方案)补全微服务基础设施。
如何用 spring-boot-starter-web + @RestController 快速暴露 HTTP 接口
这是所有微服务的起点——先让一个服务能被调用。别一上来就集成 Nacos 或 OpenFeign,先验证基础 Web 能力是否跑通。
-
spring-boot-starter-web是必须的 starter,它自动配置了嵌入式 Tomcat 和 Spring MVC - 写一个
@RestController类,方法返回 POJO 即可被序列化为 JSON,无需额外配置@ResponseBody - 默认端口是 8080,若要避免端口冲突(微服务通常多个实例),务必在
application.yml中显式设server.port: 8081等值 - 不要用
spring-boot-devtools在生产 profile 下启用,它会导致 Actuator 端点行为异常或类加载冲突
为什么不能只靠 @EnableDiscoveryClient 就算接入微服务注册中心
这个注解只是“声明本服务有意向注册”,实际能否注册成功,取决于配套依赖和配置是否匹配注册中心类型。
- 对接 Nacos:需引入
spring-cloud-starter-alibaba-nacos-discovery,且spring.cloud.nacos.discovery.server-addr必须指向 Nacos 地址(如127.0.0.1:8848) - 对接 Eureka:需
spring-cloud-starter-netflix-eureka-client,且eureka.client.service-url.defaultZone必须正确(注意末尾要有/eureka/) - 如果启动后控制台没打印 “Registered instance … with status UP”,大概率是依赖版本不兼容,比如 Spring Boot 3.x 需配 Spring Cloud 2023.x,老版 starter 直接报
NoClassDefFoundError: javax/servlet/Filter
远程调用时,RestTemplate vs WebClient vs @LoadBalanced 的实际取舍
同步调用场景下,选型直接影响线程模型和可观测性。
-
RestTemplate是阻塞式,配合@LoadBalanced注解后可直接用服务名(如http://user-service/api/user)发起调用,但 Spring 官方已标记为@Deprecated(自 5.3.21+) -
WebClient是响应式、非阻塞的,需搭配 Project Reactor 使用,适合高并发 I/O 密集型场景;但它不原生支持服务发现,需手动注入ReactorServiceInstanceLoadBalancer - 更现实的选择是
OpenFeign:加@FeignClient(name = "order-service"),接口定义即契约,底层自动走 Ribbon/Nacos 负载均衡,日志、超时、重试都可通过@Configuration统一管控
Actuator + /actuator/prometheus 为什么返回 404
这不是监控没配好,而是两个常见疏漏导致端点根本未激活。
- 缺少
spring-boot-starter-actuator依赖,或者只加了但没配置management.endpoints.web.exposure.include=*(Spring Boot 2.6+ 默认只暴露health和info) - Prometheus 指标需要额外引入
micrometer-registry-prometheus,否则/actuator/prometheus路径不会注册到 DispatcherServlet - 如果用了 Spring Security,还需放行
/actuator/**,否则返回 401;建议用permitAll()而非anonymous(),后者对 Actuator 不生效
微服务不是堆砌 Starter 就能跑起来的架构,Spring Boot 只解决“单体启动快”的问题;服务间怎么寻址、失败怎么降级、配置怎么动态刷新——这些才是微服务真正的复杂点,也最容易在开发初期被跳过。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










