深入理解微服务架构:从零搭建 Spring Cloud 微服务项目
一、前言
随着互联网业务的不断增长,传统的 单体架构 面临诸多挑战,如 代码臃肿、部署困难、扩展性差,于是 微服务架构(Microservices Architecture) 逐渐成为主流。
本篇文章将带你从 零 开始,使用 Spring Cloud 构建一个完整的 微服务项目,涵盖 服务拆分、服务注册与发现、API 网关、负载均衡、熔断降级 等关键技术,助你掌握微服务的核心思想!🚀
二、什么是微服务架构?
微服务架构(MSA, Microservices Architecture) 是一种 分布式架构,将一个应用拆分为多个 独立可部署的服务,每个服务专注于某个业务功能,并通过 RESTful API 或消息队列 进行通信。
2.1 微服务架构的特点
✅ 服务独立:每个微服务可单独开发、部署、扩展
✅ 高可用:服务间解耦,某个服务崩溃不会影响整个系统
✅ 技术栈自由:不同微服务可以使用 不同的编程语言 和 数据库
✅ 按需扩展:可对某个服务单独弹性扩展,避免资源浪费
2.2 传统单体架构 vs 微服务架构
对比项 | 传统单体架构 | 微服务架构 |
---|---|---|
架构 | 所有模块在一个应用中 | 每个模块独立运行 |
部署 | 整个应用打包为一个 JAR/WAR | 每个服务单独部署 |
技术栈 | 统一技术栈(如 Spring MVC) | 各服务可选不同技术 |
扩展性 | 扩展整个应用 | 按需扩展单个服务 |
维护成本 | 代码复杂,维护成本高 | 代码拆分,团队协作更高效 |
三、Spring Cloud 微服务架构设计
3.1 主要组件
组件 | 作用 |
---|---|
Spring Cloud Eureka | 服务注册与发现 |
Spring Cloud Gateway | API 网关,路由请求 |
Spring Cloud LoadBalancer | 负载均衡 |
Spring Cloud Resilience4j | 熔断降级 |
Spring Cloud Config | 配置中心 |
Spring Cloud Sleuth + Zipkin | 分布式链路追踪 |
3.2 架构设计
用户请求 -> API 网关 (Gateway) -> 负载均衡 -> 微服务 (订单、用户、库存等)
↓
熔断降级 (Resilience4j)
四、Spring Cloud 实战:搭建微服务系统
4.1 搭建服务注册中心(Eureka Server)
(1)创建 Spring Boot 项目
使用 Spring Initializr
创建一个 Spring Boot 项目,添加 Eureka Server 依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
(2)配置 Eureka Server
在 application.yml
中添加:
server:
port: 8761
eureka:
instance:
hostname: localhost
server:
enable-self-preservation: false # 关闭自我保护
client:
register-with-eureka: false # 不作为客户端注册
fetch-registry: false
(3)启动 Eureka Server
在 SpringBootApplication
入口类添加:
@EnableEurekaServer // 开启 Eureka 服务
@SpringBootApplication
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
启动后,访问 http://localhost:8761/
可查看 Eureka 控制台。
4.2 注册微服务(订单服务)
(1)添加 Eureka Client 依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
(2)配置 Eureka 客户端
server:
port: 8081
spring:
application:
name: order-service
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
(3)注册 Eureka Client
@EnableEurekaClient
@SpringBootApplication
public class OrderServiceApplication {
public static void main(String[] args) {
SpringApplication.run(OrderServiceApplication.class, args);
}
}
启动 order-service
后,可在 Eureka 控制台看到它已注册成功!🎉
4.3 创建 API 网关(Spring Cloud Gateway)
(1)添加 Gateway 依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
(2)配置 API 路由
server:
port: 8080
spring:
application:
name: api-gateway
cloud:
gateway:
routes:
- id: order-service
uri: lb://order-service # 负载均衡到订单服务
predicates:
- Path=/order/** # 仅转发 /order 开头的请求
(3)测试 API 网关
启动 api-gateway
后,访问:
http://localhost:8080/order/list
请求会自动转发到 order-service
🎉
4.4 负载均衡 & 熔断降级
(1)使用 Spring Cloud LoadBalancer
在 OrderServiceApplication.java
中添加:
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
默认负载均衡会自动将请求均匀分配到多个实例。
(2)熔断降级
使用 Resilience4j
:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-circuitbreaker-resilience4j</artifactId>
</dependency>
@CircuitBreaker(name = "orderService", fallbackMethod = "fallbackMethod")
public String getOrders() {
throw new RuntimeException("订单服务异常!");
}
public String fallbackMethod(Exception e) {
return "订单服务暂时不可用,请稍后重试";
}
五、总结
组件 | 作用 |
---|---|
Eureka Server | 服务注册中心 |
Eureka Client | 微服务注册 |
Spring Cloud Gateway | API 网关 |
Resilience4j | 熔断降级 |
Spring Cloud LoadBalancer | 负载均衡 |
🎯 Spring Cloud 提供了一整套微服务解决方案,让分布式系统开发更加简单高效! 通过本篇文章,你已掌握微服务的基本架构和核心技术,下一步可以深入研究 分布式事务、服务安全、日志追踪 等高级功能!🚀