一、父工程 pom.xml(根目录)
你刚才贴的那份配置有几个不一致的地方:父工程 groupId 是 com.flashsale,但子模块里又出现了 com.pingguomiaonmiao,而且 artifactId 也有写错的地方(比如 seckill-core 引用了自己)。下面我按你的目录名 Seckill-Cloud 重新整理一份完全对齐、可以直接复制粘贴的配置。
一、父工程 pom.xml(根目录)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.seckillcloud</groupId>
<artifactId>seckill-cloud</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<name>Seckill-Cloud</name>
<description>分布式高并发秒杀系统</description>
<!-- 子模块 -->
<modules>
<module>seckill-common</module>
<module>seckill-core</module>
<module>seckill-gateway</module>
</modules>
<properties>
<java.version>17</java.version>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring-boot.version>3.5.4</spring-boot.version>
<spring-cloud.version>2025.0.0</spring-cloud.version>
<spring-cloud-alibaba.version>2025.0.0.0</spring-cloud-alibaba.version>
<rocketmq.version>2.3.4</rocketmq.version>
<mybatis-plus.version>3.5.9</mybatis-plus.version>
<shardingsphere.version>5.5.0</shardingsphere.version>
<hutool.version>5.8.44</hutool.version>
<mapstruct.version>1.6.3</mapstruct.version>
<lombok.version>1.18.40</lombok.version>
<guava.version>33.5.0-jre</guava.version>
<commons-lang3.version>3.19.0</commons-lang3.version>
<okhttp.version>4.12.0</okhttp.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>
<version>${shardingsphere.version}</version>
</dependency>
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>${rocketmq.version}</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool.version}</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${mapstruct.version}</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>${guava.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons-lang3.version}</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>${okhttp.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</path>
<path>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>${spring-boot.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
二、seckill-common/pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.seckillcloud</groupId>
<artifactId>seckill-cloud</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>seckill-common</artifactId>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
</dependencies>
</project>
三、seckill-core/pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.seckillcloud</groupId>
<artifactId>seckill-cloud</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>seckill-core</artifactId>
<packaging>jar</packaging>
<dependencies>
<!-- 公共模块 -->
<dependency>
<groupId>com.seckillcloud</groupId>
<artifactId>seckill-common</artifactId>
<version>${project.version}</version>
</dependency>
<!-- Spring Boot Starters -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- 微服务组件 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<!-- 数据库 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
</dependency>
<!-- Redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<!-- ShardingSphere -->
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>
</dependency>
<!-- 工具库 -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
</dependency>
<!-- MapStruct -->
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
</dependency>
<!-- 开发辅助 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!-- 测试 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
四、seckill-gateway/pom.xml(网关模块,可选)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.seckillcloud</groupId>
<artifactId>seckill-cloud</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>seckill-gateway</artifactId>
<packaging>jar</packaging>
<dependencies>
<!-- Spring Cloud Gateway(基于 WebFlux,不要引入 spring-boot-starter-web) -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!-- Nacos 服务发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 负载均衡 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<!-- Sentinel 网关限流 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
五、修正说明(与你之前贴出的版本对比)
| 问题点 | 原配置 | 修正后 |
|---|---|---|
| 父工程 groupId | com.flashsale | com.seckillcloud(与项目名一致) |
| 子模块 parent 引用 | 出现 com.pingguomiaonmiao 等不一致 | 统一为 com.seckillcloud |
| common 模块依赖引用 | seckill-core 依赖自己 | 正确依赖 seckill-common |
| common 模块 artifactId | flashsale-common | seckill-common |
六、启动验证
在根目录执行:
mvn clean compile
如果控制台输出 BUILD SUCCESS,说明配置完全正确,可以开始写业务代码了。
好的,这份组件清单可以直接用在你的 简历项目描述 或 面试架构陈述 中。我按 分层 整理了每个组件在秒杀系统中的具体职责和选型理由。
🟢 一、基础框架层
| 组件 | 核心作用 | 在你的秒杀项目中具体负责什么 |
|---|---|---|
| Spring Boot 3.5.4 | 应用快速搭建与自动配置 | 整个项目的骨架,提供 Web 服务、依赖注入、监控端点。基于 JDK 17 运行,可利用虚拟线程提升吞吐量。 |
| Spring Cloud Alibaba 2025.0.0.0 | 微服务一站式解决方案 | 集成阿里云原生中间件,让 服务注册、配置管理、流量控制 开箱即用。 |
🔵 二、微服务治理层
| 组件 | 核心作用 | 在你的秒杀项目中具体负责什么 |
|---|---|---|
| Nacos | 服务注册发现 + 动态配置中心 | 1. 注册中心:让 seckill-core 和 seckill-gateway 互相发现。2. 配置中心:动态调整 Sentinel 限流阈值、RocketMQ Topic 配置,无需重启应用。 |
| Sentinel | 流量控制 + 熔断降级 | 秒杀核心保护神: 1. 热点参数限流:针对爆款商品 ID 单独限制 QPS。 2. 系统自适应限流:当 CPU 负载过高时自动拦截请求。 |
| Spring Cloud Gateway | 统一 API 网关 | 所有前端请求的 总入口,负责: 1. 路由转发到 seckill-core。2. 配合 Sentinel 做 网关层限流(直接拒绝无效流量,保护后端)。 |
🟡 三、数据持久化与缓存层
| 组件 | 核心作用 | 在你的秒杀项目中具体负责什么 |
|---|---|---|
| MySQL 8.0 | 关系型数据最终落盘 | 存储 订单记录、商品详情、用户信息 等需要持久化的数据。 |
| MyBatis-Plus 3.5.9 | ORM 增强工具 | 简化单表 CRUD,提供 Lambda 查询 避免字段硬编码,内置分页插件。 |
| ShardingSphere-JDBC 5.5.0 | 分库分表中间件 | 应对海量订单:将订单表按用户 ID 哈希拆分到多个物理库表,避免单表数据过大导致查询性能下降。 |
| Redis 7.x (Lettuce 客户端) | 高性能分布式缓存 | 1. 原子库存扣减:利用 Lua 脚本 保证查询与扣减的原子性,杜绝超卖。 2. 热点数据缓存:商品信息预热到 Redis,减少数据库压力。 3. 分布式锁:Redisson 实现任务调度防重。 |
🔴 四、异步消息与分布式事务层
| 组件 | 核心作用 | 在你的秒杀项目中具体负责什么 |
|---|---|---|
| RocketMQ 5.x | 高吞吐消息队列 | 1. 削峰填谷:秒杀请求先发 MQ,后端平滑消费写库,防止数据库瞬时压力过大。 2. 事务消息:扣库存成功后,异步发放优惠券/增加积分,通过 回查机制 保证最终一致性。 |
🟣 五、辅助工具与对象映射
| 组件 | 核心作用 | 在你的秒杀项目中具体负责什么 |
|---|---|---|
| 美团 Leaf | 分布式全局唯一 ID 生成 | 生成订单号:采用 号段模式(双 Buffer 机制),在数据库宕机时仍能支撑 10-20 分钟 ID 发放,单机 QPS 可达 5 万。 |
| MapStruct 1.6.3 | 对象属性拷贝 | 高效转换 DTO -> Entity -> VO,编译期生成代码,性能比 BeanUtils 高 10-20 倍。 |
| Hutool 5.8.44 | Java 万能工具包 | 处理日期格式化、UUID 生成、文件操作、JSON 解析,减少重复造轮子。 |
| Lombok 1.18.40 | 简化样板代码 | 用 @Data、@Builder、@Slf4j 注解自动生成 Getter/Setter、日志对象,保持代码整洁。 |
| Guava 33.5.0 | Google 核心工具库 | 用于 本地缓存 (Cache) 防止 Redis 热 Key 击穿,以及不可变集合。 |
⚙️ 六、部署与运维支撑
| 组件 | 核心作用 | 在你的秒杀项目中具体负责什么 |
|---|---|---|
| Docker | 容器化封装 | 将 seckill-core.jar 打包成镜像,统一运行环境。 |
| JMeter | 性能压测 | 模拟 2000+ 并发秒杀场景,验证系统 QPS 与 P99 延迟。 |
| SkyWalking / Prometheus | 全链路监控 | 追踪一次秒杀请求在 Nacos -> Gateway -> Core -> MQ -> DB 的全链路耗时。 |
💡 面试官追问时,你可以这样总结一句话:
“这套架构的核心思路是 流量前置拦截 + 异步削峰 + 最终一致性:用 Sentinel 在网关和服务层挡住非法/过量流量;用 Redis + Lua 扛住读库存的热点压力;用 RocketMQ 将写订单的峰值压力抹平;用 Leaf 和 ShardingSphere 解决海量数据的 ID 生成与存储扩展问题。”
需要我把上面这些组件的关系画成一张 架构图 发给你吗?面试时照着图讲会更有条理。
评论