Spring Boot 和 Spring Cloud 构建一个完整的微服务架构——在线购物系统
接上一篇博客,大家可以结合一起看看实例理解https://blog.csdn.net/speaking_me/article/details/143917383?spm=1001.2014.3001.5502
构建一个综合性的大型微服务项目可以帮助开发者更全面地理解和掌握 Spring Boot 和 Spring Cloud 的应用。
接下来,我将通过一个具体的例子——一个在线购物系统,来展示如何使用 Spring Boot 和 Spring Cloud 构建一个完整的微服务架构。
在线购物系统案例
1. 项目概述
该项目将模拟一个完整的在线购物系统,包括以下几个主要模块:
- 用户服务(User Service)
- 商品服务(Product Service)
- 订单服务(Order Service)
- 认证和授权服务(Auth Service)
- 配置中心(Config Server)
- 服务发现(Eureka Server)
- API 网关(Gateway Service)
- 链路追踪(Zipkin)
- 配置管理(Config Server)
- 断路器(Hystrix)
2. 技术栈
- Spring Boot: 用于快速构建各个微服务。
- Spring Cloud: 提供微服务基础设施支持。
- MySQL: 数据库存储。
- Eureka: 服务发现。
- Config Server: 集中配置管理。
- Hystrix: 断路器。
- Zipkin: 链路追踪。
- Spring Cloud Gateway: API 网关。
- RabbitMQ: 消息队列。
3. 项目结构
online-shopping-system ├── auth-service ├── config-server ├── eureka-server ├── gateway-service ├── order-service ├── product-service ├── user-service ├── zipkin-server └── pom.xml
4. 模块详解
4.1 Eureka Server
功能: 服务发现和注册中心。
创建步骤:
-
创建一个新的 Spring Boot 项目,选择以下依赖:
- Spring Web
- Spring Cloud Starter Netflix Eureka Server
-
修改
pom.xml
文件,添加 Spring Cloud 版本管理:<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Hoxton.SR12</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
-
在主类中添加
@EnableEurekaServer
注解:package com.example.eurekaserver; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @SpringBootApplication @EnableEurekaServer public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } }
-
在
application.properties
文件中配置 Eureka 服务注册中心:server.port=8761 eureka.client.register-with-eureka=false eureka.client.fetch-registry=false
4.2 Config Server
功能: 集中配置管理。
创建步骤:
-
创建一个新的 Spring Boot 项目,选择以下依赖:
- Spring Web
- Spring Cloud Config Server
-
在主类中添加
@EnableConfigServer
注解:package com.example.configserver; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.config.server.EnableConfigServer; @SpringBootApplication @EnableConfigServer public class ConfigServerApplication { public static void main(String[] args) { SpringApplication.run(ConfigServerApplication.class, args); } }
-
在
application.properties
文件中配置 Config Server:server.port=8888 spring.profiles.active=native spring.cloud.config.server.native.search-locations=file:/config-repo/
4.3 User Service
功能: 用户管理服务,包括用户注册、登录等功能。
创建步骤:
-
创建一个新的 Spring Boot 项目,选择以下依赖:
- Spring Web
- Spring Data JPA
- Spring Security
- Spring Cloud Starter Netflix Eureka Client
- Spring Cloud Starter Config
-
在
application.properties
文件中配置 Eureka 客户端和 Config Client:spring.application.name=user-service eureka.client.service-url.defaultZone=http://localhost:8761/eureka/ spring.cloud.config.uri=http://localhost:8888
-
创建用户实体、仓库、服务和控制器,类似于前面的用户管理服务示例。
4.4 Product Service
功能: 商品管理服务,包括商品列表、详情等功能。
创建步骤:
-
创建一个新的 Spring Boot 项目,选择以下依赖:
- Spring Web
- Spring Data JPA
- Spring Cloud Starter Netflix Eureka Client
- Spring Cloud Starter Config
-
在
application.properties
文件中配置 Eureka 客户端和 Config Client:spring.application.name=product-service eureka.client.service-url.defaultZone=http://localhost:8761/eureka/ spring.cloud.config.uri=http://localhost:8888
-
创建商品实体、仓库、服务和控制器。
4.5 Order Service
功能: 订单管理服务,包括下单、查看订单等功能。
创建步骤:
-
创建一个新的 Spring Boot 项目,选择以下依赖:
- Spring Web
- Spring Data JPA
- Spring Cloud Starter Netflix Eureka Client
- Spring Cloud Starter Config
- Spring Cloud Starter OpenFeign
- Spring Cloud Starter Netflix Hystrix
-
在
application.properties
文件中配置 Eureka 客户端和 Config Client:spring.application.name=order-service eureka.client.service-url.defaultZone=http://localhost:8761/eureka/ spring.cloud.config.uri=http://localhost:8888
-
创建订单实体、仓库、服务和控制器。
-
使用 Feign 客户端调用其他服务(如用户服务和商品服务)。
-
使用 Hystrix 实现断路器。
4.6 Auth Service
功能: 认证和授权服务,提供用户认证和授权功能。
创建步骤:
-
创建一个新的 Spring Boot 项目,选择以下依赖:
- Spring Web
- Spring Security
- Spring Cloud Starter Netflix Eureka Client
- Spring Cloud Starter Config
-
在
application.properties
文件中配置 Eureka 客户端和 Config Client:spring.application.name=auth-service eureka.client.service-url.defaultZone=http://localhost:8761/eureka/ spring.cloud.config.uri=http://localhost:8888
-
配置 Spring Security,实现 JWT 认证和授权。
4.7 Gateway Service
功能: API 网关,统一管理微服务之间的交互。
创建步骤:
-
创建一个新的 Spring Boot 项目,选择以下依赖:
- Spring Web
- Spring Cloud Gateway
- Spring Cloud Starter Netflix Eureka Discovery
-
在主类中添加
@EnableDiscoveryClient
注解:package com.example.gateway; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient public class GatewayApplication { public static void main(String[] args) { SpringApplication.run(GatewayApplication.class, args); } }
-
在
application.properties
文件中配置 Gateway:server.port=8080 spring.application.name=gateway-service eureka.client.service-url.defaultZone=http://localhost:8761/eureka/ spring.cloud.gateway.routes[0].id=user-service spring.cloud.gateway.routes[0].uri=lb://user-service spring.cloud.gateway.routes[0].predicates[0]=Path=/users/** spring.cloud.gateway.routes[1].id=product-service spring.cloud.gateway.routes[1].uri=lb://product-service spring.cloud.gateway.routes[1].predicates[0]=Path=/products/** spring.cloud.gateway.routes[2].id=order-service spring.cloud.gateway.routes[2].uri=lb://order-service spring.cloud.gateway.routes[2].predicates[0]=Path=/orders/**
4.8 Zipkin Server
功能: 链路追踪,帮助定位和分析问题。
创建步骤:
-
创建一个新的 Spring Boot 项目,选择以下依赖:
- Spring Web
- Spring Cloud Sleuth
- Spring Cloud Starter Zipkin
-
在主类中添加
@EnableZipkinServer
注解:package com.example.zipkin; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.sleuth.zipkin.stream.EnableZipkinStreamServer; @SpringBootApplication @EnableZipkinStreamServer public class ZipkinServerApplication { public static void main(String[] args) { SpringApplication.run(ZipkinServerApplication.class, args); } }
-
在
application.properties
文件中配置 Zipkin:server.port=9411 spring.zipkin.stream.enabled=true spring.zipkin.stream.binders.rabbit.type=input spring.rabbitmq.host=localhost spring.rabbitmq.port=5672 spring.rabbitmq.username=guest spring.rabbitmq.password=guest
5. 运行和测试
-
启动 Eureka Server:
cd eureka-server ./mvnw spring-boot:run
-
启动 Config Server:
cd config-server ./mvnw spring-boot:run
-
启动 Zipkin Server:
cd zipkin-server ./mvnw spring-boot:run
-
启动各个微服务:
cd user-service ./mvnw spring-boot:run cd product-service ./mvnw spring-boot:run cd order-service ./mvnw spring-boot:run cd auth-service ./mvnw spring-boot:run cd gateway-service ./mvnw spring-boot:run
-
测试 API:
- 使用 Postman 或 curl 测试各个服务的 API。
- 访问
http://localhost:8080/users
查看用户列表。 - 访问
http://localhost:8080/products
查看商品列表。 - 访问
http://localhost:8080/orders
查看订单列表。
6. 总结
通过上述步骤,我们构建了一个完整的在线购物系统,涵盖了用户管理、商品管理、订单管理、认证和授权、配置管理、服务发现、API 网关、链路追踪等各个方面。这个项目不仅展示了如何使用 Spring Boot 和 Spring Cloud 构建微服务,还展示了如何管理和维护一个复杂的微服务架构。
希望这个综合性的案例能够帮助你更好地理解和应用 Spring Boot 和 Spring Cloud 构建微服务架构。