终极 Java 中间件实战课:电商系统架构实战教程
电商系统架构实战教程
1. 系统架构设计
1.1 系统模块划分
电商系统通常包含以下核心模块:
- 用户服务:用户注册、登录、信息管理
- 商品服务:商品管理、库存管理
- 订单服务:订单创建、支付、物流
- 营销服务:优惠券、促销活动
- 支付服务:对接第三方支付
- 网关服务:统一入口、权限校验
- 后台管理:运营管理界面
1.2 技术选型
- 开发语言:
Java 11+
- 框架:
Spring Boot 2.7+、Spring Cloud
- 注册中心:
Nacos
- 配置中心:
Nacos
- 网关:
Spring Cloud Gateway
- 服务调用:
OpenFeign
- 负载均衡:
Ribbon
- 熔断限流:
Sentinel
- 消息队列:
RocketMQ
- 缓存:
Redis
- 数据库:
MySQL
- 搜索引擎:
Elasticsearch
- 分布式事务:
Seata
2. 环境搭建
2.1 开发环境准备
- 安装
JDK 11+
- 安装
Maven 3.6+
- 安装
IntelliJ IDEA
- 安装
Docker
和Docker Compose
2.2 基础设施部署
使用Docker Compose
部署基础中间件:
version: '3'
services:
# Nacos服务注册与配置中心
nacos:
image: nacos/nacos-server:2.0.3
container_name: nacos
environment:
MODE: standalone
ports:
- "8848:8848"
- "9848:9848"
- "9849:9849"
volumes:
- ./nacos/logs:/home/nacos/logs
- ./nacos/init.d:/home/nacos/init.d
# Redis缓存
redis:
image: redis:6.2.6
container_name: redis
ports:
- "6379:6379"
volumes:
- ./redis/data:/data
command: redis-server --appendonly yes
# MySQL数据库
mysql:
image: mysql:8.0.26
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: ecom_db
ports:
- "3306:3306"
volumes:
- ./mysql/data:/var/lib/mysql
- ./mysql/init:/docker-entrypoint-initdb.d
# RocketMQ消息队列
rocketmq:
image: rocketmqinc/rocketmq:4.9.2
container_name: rocketmq
ports:
- "9876:9876"
- "10909:10909"
- "10911:10911"
command: sh mqnamesrv && sh mqbroker -n localhost:9876
# Elasticsearch搜索引擎
elasticsearch:
image: elasticsearch:7.17.3
container_name: elasticsearch
environment:
- discovery.type=single-node
- ES_JAVA_OPTS=-Xms512m -Xmx512m
ports:
- "9200:9200"
- "9300:9300"
volumes:
- ./elasticsearch/data:/usr/share/elasticsearch/data
# Kibana可视化工具
kibana:
image: kibana:7.17.3
container_name: kibana
ports:
- "5601:5601"
depends_on:
- elasticsearch
3. 用户服务开发
3.1 创建Maven项目
首先创建一个基础的Maven项目作为父工程:
<!-- pom.xml -->
<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.ecommerce</groupId>
<artifactId>ecommerce-parent</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<modules>
<module>user-service</module>
<module>product-service</module>
<module>order-service</module>
<module>gateway-service</module>
</modules>
<properties>
<java.version>11</java.version>
<spring-boot.version>2.7.10</spring-boot.version>
<spring-cloud.version>2021.0.5</spring-cloud.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- Spring Boot依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Spring Cloud依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- MyBatis依赖 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.3.1</version>
</dependency>
<!-- Nacos依赖 -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>2.0.3</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
3.2 创建用户服务模块
<!-- user-service/pom.xml -->
<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.ecommerce</groupId>
<artifactId>ecommerce-parent</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>user-service</artifactId>
<dependencies>
<!-- Spring Boot Starter Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Boot Starter Data JPA -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- MySQL驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- Nacos Discovery -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- Sentinel -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- Redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
</dependencies>
</project>
3.3 配置文件
# user-service/src/main/resources/application.yml
spring:
application:
name: user-service # 服务名称
cloud:
nacos: