終極 Java 中間件實戰課:電商系統架構實戰教程
- 電商系統架構實戰教程
- 1. 系統架構設計
- 1.1 系統模塊劃分
- 1.2 技術選型
- 2. 環境搭建
- 2.1 開發環境準備
- 2.2 基礎設施部署
- 3. 用戶服務開發
- 3.1 創建Maven項目
- 3.2 創建用戶服務模塊
- 3.3 配置文件
- 3.4 實體類與數據庫設計
- 3.5 DAO層實現
- 3.6 Service層實現
- 3.7 Controller層實現
- 3.8 主應用類
- 4. 商品服務開發
- 5. 訂單服務開發
- 6. 網關服務開發
- 7. 服務調用與集成
- 8. 分布式事務處理
- 9. 服務監控與熔斷
- 10. 日志收集與分析平臺
- 11. 系統部署與性能優化
- 12. 高級主題實現
- 總結
電商系統架構實戰教程
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.3container_name: nacosenvironment:MODE: standaloneports:- "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.6container_name: redisports:- "6379:6379"volumes:- ./redis/data:/datacommand: redis-server --appendonly yes# MySQL數據庫mysql:image: mysql:8.0.26container_name: mysqlenvironment:MYSQL_ROOT_PASSWORD: rootMYSQL_DATABASE: ecom_dbports:- "3306:3306"volumes:- ./mysql/data:/var/lib/mysql- ./mysql/init:/docker-entrypoint-initdb.d# RocketMQ消息隊列rocketmq:image: rocketmqinc/rocketmq:4.9.2container_name: rocketmqports:- "9876:9876"- "10909:10909"- "10911:10911"command: sh mqnamesrv && sh mqbroker -n localhost:9876# Elasticsearch搜索引擎elasticsearch:image: elasticsearch:7.17.3container_name: elasticsearchenvironment:- discovery.type=single-node- ES_JAVA_OPTS=-Xms512m -Xmx512mports:- "9200:9200"- "9300:9300"volumes:- ./elasticsearch/data:/usr/share/elasticsearch/data# Kibana可視化工具kibana:image: kibana:7.17.3container_name: kibanaports:- "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: