刚果商城,不一样的商城系统
刚果商城是个从零到一的商城项目,包含商城核心业务和基础架构两大模块。
参照商城系统原型,推出用户、消息、商品、订单、优惠券、支付、网关、购物车等业务模块,通过商城系统中复杂场景,给出对应解决方案。使用 DDD 模型开发系统功能,帮助对 DDD 一知半解的开发者树立正确地开发思路。
能学到什么
刚果商城系统是我从事开发以来,在实际工作中遇到各种场景问题的“疑难杂症”汇总。
这些问题有些是自己遇到的,有些是其他人遇到帮忙解决的,最终把解决方案和代码实战放在刚果商城这个系统里。
这个系统没有很完整的商城业务,但是提供了偏架构层面有用的工具和参考,能帮助大家在实际项目中更好地解决问题。
如果你能够认真且坚持把项目看完,我相信你会收获包括不限于下面这些知识点:
- 基于 DDD 领域驱动模型设计实现的商品、购物车、订单、用户、消息以及支付服务。
- 掌握分布式锁、分布式事务、分布式搜索、分布式缓存、分布式限流以及分库分表等核心技术。
- 完成基础组件抽象,规约、缓存、幂等、分布式 ID、数据持久层、脱敏以及日志等底层组件库。
- 基于 Agent 开发字节码流量监控,监控项目接口 QPS、响应时间和异常请求等核心指标。
- 掌握常用设计模式实战场景,策略、责任链、装饰器、观察者以及适配器等设计模式。
如何开始
刚果商城核心有两块,分别是商城业务和基础架构,通过认真学习分别可以收获以下两种能力提升。
- 商城业务:通过学习刚果商城中复杂业务处理场景,增加自己的复杂业务处理能力。
- 基础架构:尝试跟着基础架构部分自己把轮子都造一遍,以此提高自己方案设计和公共代码开发能力。
1)商城核心业务
目前 前端页面 正在开发中,暂时没有开源出来,所以大家需要通过接口请求访问。接口如何访问详细看下文。
-
初始化数据库,比如商品库、订单库、用户库、支付库、购物车库等;
-
通过 Docker 安装项目中依赖的中间件,比如 Nacos2、MySQL、Seata、RocketMQ 等;
-
学习接口调用流程,项目接口目前全量放入 Apifox 软件中,可通过在线访问;
-
查看不同微服务之间的依赖关系,并根据文档中的描述进行修改指定参数;
-
找到自己感兴趣的模块功能 Debug 源代码,参考代码设计。
2)基础架构
基础架构相关的代码都在 congomall-framework-all 模块中,可以通过官网查看如何实现,或者通过 视频教学 来学习如何开发基础架构代码。
服务列表
刚果商城项目是从零到一写出来的,当前已开发模块如下所述,没有完成的请耐心等待。
模块名称
服务名称
访问地址
1
congomall-message
消息发送 eg:邮件、公众号、短信等
2
congomall-customer-user
用户服务
3
congomall-gateway
外部网关
4
congomall-product
商品服务
5
congomall-product-job
商品 Job 服务
6
congomall-cart
购物车服务
7
congomall-order
订单服务
8
congomall-pay
支付服务
9
congomall-basic-data
基础数据服务
10
congomall-bff
商城聚合层(BFF)
接口请求
目前刚果商城已开发的接口已汇总至下述接口文档中,本地启动对应项目,通过接口文档访问查看效果。
如果需要通过 Apifox 直接调用,需要安装对应浏览器内网插件,这里把插件安装包装上,跟着教程安装即可使用。
模块介绍
刚果商城后端系统模块介绍如下所示。
├── congomall-basic-data || -- # 基础数据服务
│ ├── congomall-basic-data-application
│ ├── congomall-basic-data-domain
│ ├── congomall-basic-data-infrastructure
│ ├── congomall-basic-data-interface
├── congomall-bff || -- # 商城 BFF 聚合层
│ ├── congomall-bff-biz
│ ├── congomall-bff-remote
│ ├── congomall-bff-web
├── congomall-cart || -- # 购物车服务
│ ├── congomall-cart-application
│ ├── congomall-cart-domain
│ ├── congomall-cart-infrastructure
│ ├── congomall-cart-interface
├── congomall-coupon || -- # 优惠券服务
├── congomall-customer-user || -- # C端用户服务
│ ├── congomall-customer-user-application
│ ├── congomall-customer-user-domain
│ ├── congomall-customer-user-infrastructure
│ ├── congomall-customer-user-interface
│ ├── congomall-customer-user-mock
├── congomall-framework-all || -- # 基础组件
│ ├── congomall-base-spring-boot-starter || -- # 顶层抽象基础组件
│ ├── congomall-cache-spring-boot-starter || -- # 缓存组件
│ ├── congomall-common-spring-boot-starter || -- # 公共工具包组件
│ ├── congomall-convention-spring-boot-starter || -- # 项目规约组件
│ ├── congomall-database-spring-boot-starter || -- # 数据库持久层组件
│ ├── congomall-ddd-framework-core || -- # DDD抽象接口组件
│ ├── congomall-designpattern-spring-boot-starter || -- # 设计模式抽象组件
│ ├── congomall-distributedid-spring-boot-starter || -- # 分布式ID组件
│ ├── congomall-flow-monitor-agent || -- # 微服务流量监控组件
│ ├── congomall-httputil-spring-boot-starter || -- # Http网络调用组件
│ ├── congomall-idempotent-spring-boot-starter || -- # 分布式幂等组件
│ ├── congomall-log-spring-boot-starter || -- # 日志打印组件
│ ├── congomall-minio-spring-boot-starter || -- # 文件存储组件
│ ├── congomall-openfeign-spring-boot-starter || -- # 微服务调用组件
│ ├── congomall-rocketmq-spring-boot-starter || -- # 分布式消息队列组件
│ ├── congomall-sensitive-spring-boot-starter || -- # 前端返回数据脱敏组件
│ ├── congomall-swagger-spring-boot-starter || -- # 文档API组件
│ ├── congomall-web-spring-boot-starter || -- # Web组件
│ ├── congomall-xxljob-spring-boot-starter || -- # 定时任务组件
├── congomall-gateway || -- # 网关服务
├── congomall-message || -- # 消息服务
│ ├── congomall-message-application
│ ├── congomall-message-domain
│ ├── congomall-message-infrastructure
│ ├── congomall-message-interface
├── congomall-order || -- # 订单服务
│ ├── congomall-order-application
│ ├── congomall-order-domain
│ ├── congomall-order-infrastructure
│ ├── congomall-order-interface
├── congomall-pay || -- # 支付服务
│ ├── congomall-pay-application
│ ├── congomall-pay-domain
│ ├── congomall-pay-infrastructure
│ ├── congomall-pay-interface
├── congomall-product || -- # 商品服务
│ ├── congomall-product-application
│ ├── congomall-product-domain
│ ├── congomall-product-infrastructure
│ ├── congomall-product-interface
│ ├── congomall-product-job
├── congomall-test-all || -- # 测试用例
│ ├── congomall-flow-monitor-agent-test
│ ├── congomall-h2-test
│ ├── congomall-oom-test
│ ├── congomall-smooth-sharding-test
│ ├── congomall-yaml-test
├── dev-support || -- # 开发工具包
技术选型
当前暂时先梳理后端技术,前端开发后再行梳理。
技术
名称
官网
1
Spring Boot
基础框架
2
MyBatis-Plus
持久层框架
3
HikariCP
数据库连接池
4
Redis
分布式缓存数据库
5
RocketMQ
消息队列
6
ShardingSphere
数据库生态系统
7
SpringCloud Alibaba
分布式框架
8
SpringCloud Gateway
网关框架
9
Seata
分布式事务框架
10
Canal
MySQL 订阅 BinLog 组件
11
MinIO
文件存储框架
12
Swagger3
项目 API 文档框架
13
Knife4j
Swagger 增强框架
14
Maven
项目构建管理
15
Redisson
Redis Java 客户端
16
Sentinel
流控防护框架
17
Hippo4j
动态线程池框架
18
XXL-Job
分布式定时任务框架
19
SkyWalking
分布式链路追踪框架
20
JetCache
Java 缓存框架