当前位置: 首页 > article >正文

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

功能: 服务发现和注册中心。

创建步骤:

  1. 创建一个新的 Spring Boot 项目,选择以下依赖:

    • Spring Web
    • Spring Cloud Starter Netflix Eureka Server
  2. 修改 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>
  3. 在主类中添加 @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);
        }
    }
  4. application.properties 文件中配置 Eureka 服务注册中心:

    server.port=8761
    eureka.client.register-with-eureka=false
    eureka.client.fetch-registry=false
4.2 Config Server

功能: 集中配置管理。

创建步骤:

  1. 创建一个新的 Spring Boot 项目,选择以下依赖:

    • Spring Web
    • Spring Cloud Config Server
  2. 在主类中添加 @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);
        }
    }
  3. 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

功能: 用户管理服务,包括用户注册、登录等功能。

创建步骤:

  1. 创建一个新的 Spring Boot 项目,选择以下依赖:

    • Spring Web
    • Spring Data JPA
    • Spring Security
    • Spring Cloud Starter Netflix Eureka Client
    • Spring Cloud Starter Config
  2. 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
  3. 创建用户实体、仓库、服务和控制器,类似于前面的用户管理服务示例。

4.4 Product Service

功能: 商品管理服务,包括商品列表、详情等功能。

创建步骤:

  1. 创建一个新的 Spring Boot 项目,选择以下依赖:

    • Spring Web
    • Spring Data JPA
    • Spring Cloud Starter Netflix Eureka Client
    • Spring Cloud Starter Config
  2. 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
  3. 创建商品实体、仓库、服务和控制器。

4.5 Order Service

功能: 订单管理服务,包括下单、查看订单等功能。

创建步骤:

  1. 创建一个新的 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
  2. 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
  3. 创建订单实体、仓库、服务和控制器。

  4. 使用 Feign 客户端调用其他服务(如用户服务和商品服务)。

  5. 使用 Hystrix 实现断路器。

4.6 Auth Service

功能: 认证和授权服务,提供用户认证和授权功能。

创建步骤:

  1. 创建一个新的 Spring Boot 项目,选择以下依赖:

    • Spring Web
    • Spring Security
    • Spring Cloud Starter Netflix Eureka Client
    • Spring Cloud Starter Config
  2. 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
  3. 配置 Spring Security,实现 JWT 认证和授权。

4.7 Gateway Service

功能: API 网关,统一管理微服务之间的交互。

创建步骤:

  1. 创建一个新的 Spring Boot 项目,选择以下依赖:

    • Spring Web
    • Spring Cloud Gateway
    • Spring Cloud Starter Netflix Eureka Discovery
  2. 在主类中添加 @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);
        }
    }
  3. 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

功能: 链路追踪,帮助定位和分析问题。

创建步骤:

  1. 创建一个新的 Spring Boot 项目,选择以下依赖:

    • Spring Web
    • Spring Cloud Sleuth
    • Spring Cloud Starter Zipkin
  2. 在主类中添加 @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);
        }
    }
  3. 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. 运行和测试
  1. 启动 Eureka Server:

    cd eureka-server
    ./mvnw spring-boot:run
  2. 启动 Config Server:

    cd config-server
    ./mvnw spring-boot:run
  3. 启动 Zipkin Server:

    cd zipkin-server
    ./mvnw spring-boot:run
  4. 启动各个微服务:

    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
  5. 测试 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 构建微服务架构。


http://www.kler.cn/a/409479.html

相关文章:

  • 【Electron学习笔记(二)】基于Electron开发应用程序
  • Apple Vision Pro开发003-PolySpatial2.0新建项目
  • springboot集成shiro和前后端分离配置
  • opencv-python 分离边缘粘连的物体(距离变换)
  • 高级网络安全——SSL/TLS, HTTPS, VPN(week4)
  • 【es6进阶】vue3中的数据劫持的最新实现方案的proxy的详解
  • Azkaban部署
  • Anaconda 的下载地址
  • MySQL学习/复习10视图/用户/权限/语言连接数据库
  • 【Linux 篇】Docker 的容器之海与镜像之岛:于 Linux 系统内探索容器化的奇妙航行
  • Client 操作索引库和文档(PHP版)
  • 后台发货时用户收到【商品确认收货提醒】
  • C 语言多文件项目
  • 探索 Vue.js:构建交互式前端的强大工具
  • v-if和:visible.sync
  • 第144场双周赛题解:两个字符串得切换距离
  • Dubbo Golang快速开发Rpc服务
  • 详解Oracle表的类型(二)
  • springboot集成shiro和前后端分离配置
  • matlab 反距离插值 IDW
  • 【系统架构设计师】真题论文: 论非功能性需求对企业应用架构设计的影响(包括解题思路和素材)
  • 基于YOLOv8深度学习的智慧交通事故检测系统研究与实现(PyQt5界面+数据集+训练代码)
  • jdk8特性:CompletableFuture的使用
  • 小R的随机播放顺序
  • 论文 | Recitation-Augmented Language Models
  • 6.STM32之通信接口《精讲》之USART通信(PC串口与OLED交互)---多字节数据收发(数据包的模式:HEX数据包和文本数据包)