深入理解微服务架构:从零搭建 Spring Cloud 微服务项目

深入理解微服务架构:从零搭建 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 GatewayAPI 网关,路由请求
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 GatewayAPI 网关
Resilience4j熔断降级
Spring Cloud LoadBalancer负载均衡

🎯 Spring Cloud 提供了一整套微服务解决方案,让分布式系统开发更加简单高效! 通过本篇文章,你已掌握微服务的基本架构和核心技术,下一步可以深入研究 分布式事务、服务安全、日志追踪 等高级功能!🚀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全栈探索者chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值