前置知识: Java

Spring Cloud 微服务开发

00:00
6 min Intermediate 2026/5/3

Spring Cloud微服务架构与开发

1. 微服务架构概述

微服务架构是一种将应用程序拆分为多个独立、可部署服务的架构风格。每个服务都围绕特定业务功能构建,并且可以独立开发、部署和扩展。

核心特性

  • 服务拆分:按业务领域拆分应用
  • 独立部署:每个服务可以单独部署和升级
  • 服务通信:通过网络协议进行服务间通信
  • 弹性伸缩:根据负载自动调整服务实例数量
  • 容错处理:服务故障不影响整体系统

2. Spring Cloud 生态系统

Spring Cloud 为微服务架构提供了完整的解决方案,包括服务发现、配置管理、负载均衡、断路器等核心组件。

核心组件

组件功能实现
服务发现自动注册和发现服务Eureka, Consul, Zookeeper
配置管理集中管理配置Config Server
负载均衡分发请求到多个服务实例Ribbon, LoadBalancer
断路器防止服务雪崩Hystrix, Resilience4j
API网关统一入口和路由Gateway, Zuul
链路追踪监控服务调用链Sleuth + Zipkin
分布式事务跨服务事务处理Seata

3. 环境搭建

3.1 基础依赖

 <dependencyManagement>
  <dependencies>
  <dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-dependencies</artifactId>
  <version>2023.0.0</version>
  <type>pom</type>
  <scope>import</scope>
  </dependency>
  </dependencies>
 </dependencyManagement>

3.2 服务注册与发现 (Eureka)

服务端

 @SpringBootApplication
 @EnableEurekaServer
 public class EurekaServerApplication {
  public static void main(String[] args) {
  SpringApplication.run(EurekaServerApplication.class, args);
  }
 }

客户端

 @SpringBootApplication
 @EnableEurekaClient
 public class ServiceApplication {
  public static void main(String[] args) {
  SpringApplication.run(ServiceApplication.class, args);
  }
 }

4. 服务通信

4.1 RestTemplate

 @RestController
 public class OrderController {
  @Autowired
  private RestTemplate restTemplate;
  @GetMapping("/order/{id}")
  public Order getOrder(@PathVariable Long id) {
  // 调用商品服务
  Product product = restTemplate.getForObject(
  "http://product-service/product/1", Product.class);
  // 处理订单逻辑
  return new Order(id, product);
  }
 }

4.2 Feign

添加依赖

 <dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-openfeign</artifactId>
 </dependency>

定义Feign客户端

 @FeignClient(name = "product-service")
 public interface ProductClient {
  @GetMapping("/product/{id}")
  Product getProduct(@PathVariable("id") Long id);
 }

使用Feign客户端

 @RestController
 public class OrderController {
  @Autowired
  private ProductClient productClient;
  @GetMapping("/order/{id}")
  public Order getOrder(@PathVariable Long id) {
  // 调用商品服务
  Product product = productClient.getProduct(1L);
  // 处理订单逻辑
  return new Order(id, product);
  }
 }

5. 配置管理

5.1 配置服务器

添加依赖

 <dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-config-server</artifactId>
 </dependency>

配置

 @SpringBootApplication
 @EnableConfigServer
 public class ConfigServerApplication {
  public static void main(String[] args) {
  SpringApplication.run(ConfigServerApplication.class, args);
  }
 }

application.yml

server:
  port: 8888
spring:
  cloud:
  config:
  server:
  git:
  uri: https://github.com/your-repo/config-repo
  search-paths: '{application}'

5.2 配置客户端

添加依赖

 <dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-config</artifactId>
 </dependency>

bootstrap.yml

spring:
  application:
  name: order-service
  cloud:
  config:
  uri: http://localhost:8888
  profile: dev

6. API网关

6.1 Spring Cloud Gateway

添加依赖

 <dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-gateway</artifactId>
 </dependency>

配置

 spring:
  cloud:
  gateway:
  routes:
  - id: product_route
  uri: lb://product-service
  predicates:
  - Path=/api/product/**
  filters:
  - StripPrefix=2
  - id: order_route
  uri: lb://order-service
  predicates:
  - Path=/api/order/**
  filters:
  - StripPrefix=2

7. 断路器

7.1 Resilience4j

添加依赖

 <dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-circuitbreaker-resilience4j</artifactId>
 </dependency>

使用

 @RestController
 public class OrderController {
  @Autowired
  private ProductClient productClient;
  @CircuitBreaker(name = "productService", fallbackMethod = "fallbackGetProduct")
  @GetMapping("/order/{id}")
  public Order getOrder(@PathVariable Long id) {
  Product product = productClient.getProduct(1L);
  return new Order(id, product);
  }
  public Order fallbackGetProduct(Long id, Exception e) {
  // 降级逻辑
  return new Order(id, new Product(0L, "默认商品", 0.0));
  }
 }

8. 链路追踪

8.1 Sleuth + Zipkin

添加依赖

 <dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-sleuth</artifactId>
 </dependency>
 <dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-sleuth-zipkin</artifactId>
 </dependency>

配置

spring:
  zipkin:
  base-url: http://localhost:9411
  sleuth:
  sampler:
  probability: 1.0

9. 分布式事务

9.1 Seata

添加依赖

 <dependency>
  <groupId>io.seata</groupId>
  <artifactId>seata-spring-boot-starter</artifactId>
  <version>1.7.1</version>
 </dependency>

使用

 @RestController
 public class OrderController {
  @Autowired
  private OrderService orderService;
  @GlobalTransactional
  @PostMapping("/order")
  public Order createOrder(@RequestBody OrderDTO orderDTO) {
  return orderService.createOrder(orderDTO);
  }
 }

10. 部署与监控

10.1 Docker 部署

Dockerfile

 from openjdk:17-jdk-alpine
 COPY target/order-service.jar order-service.jar
 ENTRYPOINT ["java","-jar","/order-service.jar"]

10.2 Kubernetes 部署

Deployment

 apiVersion: apps/v1
 kind: Deployment
 metadata:
  name: order-service
 spec:
  replicas: 3
  selector:
  matchLabels:
  app: order-service
  template:
  metadata:
  labels:
  app: order-service
  spec:
  containers:
  - name: order-service
  image: order-service:latest
  ports:
  - containerPort: 8080

10.3 监控

  • Spring Boot Actuator:提供健康检查、指标监控
  • Prometheus + Grafana:收集和可视化监控数据
  • ELK Stack:日志收集和分析

11. 最佳实践

  1. 服务拆分原则:按业务领域拆分,避免过细或过粗
  2. API 设计:遵循 RESTful 规范,版本化 API
  3. 配置管理:集中管理配置,支持环境区分
  4. 容错设计:实现断路器、重试、超时等机制
  5. 监控告警:建立完善的监控体系
  6. 安全防护:实现服务间认证和授权
  7. 持续集成:自动化构建和部署

12. 常见问题与解决方案

12.1 服务发现问题

症状:服务无法注册到注册中心 解决方案:检查网络连接、注册中心地址配置、服务名称配置

12.2 服务调用超时

症状:服务调用经常超时 解决方案设置合理的超时时间、实现重试机制、优化服务响应时间

12.3 配置更新不生效

症状:修改配置服务更新 解决方案检查配置文件路径、重启服务或使用刷新机制

12.4 分布式事务问题

症状:跨服务事务不一致 解决方案:使用 Seata 等分布式事务框架,实现最终一致性

13. 项目实战

13.1 微服务架构示例

服务结构

  • eureka-server服务注册中心
  • config-server配置中心
  • gateway:API 网关
  • product-service:商品服务
  • order-service订单服务
  • user-service用户服务

13.2 开发流程

  1. 创建父项目管理依赖版本
  2. 搭建注册中心和配置中心
  3. 开发各个业务服务
  4. 配置 API 网关
  5. 实现服务间通信
  6. 添加监控和容错机制
  7. 部署测试

14. 延伸阅读

知识检测

学习进度

-- 已学文档
--% 知识覆盖率

学习推荐

专注模式