发现一个商城开源项目,谷粒商城外又多了个选择

语言: CN / TW / HK

官网地址:https://magestack.cn

刚果商城是个从零到一的 C 端商城项目,包含商城核心业务和基础架构两大模块。

参照商城系统原型,推出用户、消息、商品、订单、优惠券、支付、网关、购物车等业务模块,通过商城系统中复杂场景,给出对应解决方案。使用 DDD 模型开发系统功能,帮助对 DDD 一知半解的开发者树立正确地开发思路。

🔨 如何开始

刚果商城核心有两块,分别是商城业务和基础架构,通过认真学习分别可以收获以下两种能力提升。

  • 商城业务:通过学习刚果商城中复杂业务处理场景,增加自己的复杂业务处理能力。
  • 基础架构:尝试跟着基础架构部分自己把轮子都造一遍,以此提高自己方案设计和公共代码开发能力。

1)商城核心业务

目前前端页面正在开发中,暂时没有开源出来,所以大家需要通过接口请求访问。接口如何访问详细看下文。

  1. 初始化数据库,比如商品库、订单库、用户库、支付库、购物车库等;
  2. 通过 Docker 安装项目中依赖的中间件,比如 Nacos2、MySQL、Seata、RocketMQ 等;
  3. 学习接口调用流程,项目接口目前全量放入 Apifox 软件中,可通过在线访问;
  4. 查看不同微服务之间的依赖关系,并根据文档中的描述进行修改指定参数;
  5. 找到自己感兴趣的模块功能 Debug 源代码,参考代码设计。

image

2)基础架构

基础架构相关的代码都在 congomall-framework-all 模块中,可以通过官网查看如何实现,或者通过 视频教学 来学习如何开发基础架构代码。

image

📝 文档

注:文章里 TODO 的是还没写(耐心等待更新吧)

入门准备 - 加入交流群 - 初始化数据库 - 环境搭建 - MySQL 5.7.x 简易安装部署 - Redis 简易安装部署 - RocketMQ 4.5.1 安装部署 - Nacos 2.1.1 安装部署 - Sentinel 1.8.4 安装部署 - MinIO 安装部署 - Prometheus 安装部署 - Grafana 安装部署 - Seata 1.5.2 安装部署 - Canal 1.1.5 安装部署 - SkyWalking 9.3.0 安装部署 - XXL-Job 2.3.1 安装部署 - 项目说明 - 接口文档说明 - 技术架构选型 - 项目结构说明 - 商品 SPU、SKU 之间的区别

快速开始

系统设计 - 数据库设计 - 通用系统设计 - SpringBoot 封装 Web 请求通用返回 - SpringBoot 封装项目统一异常处理 - 用户系统设计 - 电商平台亿级用户如何分库分表 - 商品系统设计 - 如何解决商品秒杀库存超卖问题 - 亿级商品数据如何快速同步三方数据库 - 订单系统设计 - 订单&明细表数据如何进行分库分表 - 如何实现订单 15 分钟未支付自动取消 - 服务端如何解决用户下单重复 - 如何保证消息队列不被重复消费 - 支付系统设计 - 消息系统设计 - 架构师设计的百万数据量安全导入 - 架构师设计的百万数据量安全导出

场景实战 - 并发编程 - 参考 Dubbo 线程池模型实现快速消费线程池 - 线程池如何监控,才能帮助开发者快速定位错误 - 揭秘 Java8 ParallelStream 并行流极端情况串行化 - 分布式架构 - 如何保证雪花算法集群环境下不重复 - 彻底掌握分布式事务 2PC、3PC 模型 - 从根上理解 Redis 分布式锁演进架构 - 从 Redisson 源码到红锁 RedLock 算法思想 - 应用安全 - 如何防止数据库敏感信息泄漏 - 如何防止配置文件敏感信息泄漏 - 如何实现前端返回数据脱敏 - 生产问题 - 为什么线上异常信息为空,而本地可以正常打印 - 应用出现 OOM 异常,程序员如何第一时间知道 - 核心接口请求出错,结果忘记打印相关日志 - 数据库 - MySQL 单表千万数据量如何深分页优化 - MyBatis 千万数据量查询不发生内存溢出 - 分库分表 - 分库分表如何实现平滑上线 & 回滚 - 按照时间分库分表,如何按照 ID 查询记录 - 按照用户分库分表,如何按照订单 ID 查询记录 - 本地&分布式缓存 - 如何解决缓存穿透&击穿&雪崩 - 说说布隆过滤器查询误判和数据不能删除解决方案 - 如何通过 Caffeine & Redis 实现多级缓存 - 缓存和数据库一致性问题如何解决 - 源码解析 - MyBatis 整体架构设计分享 - 花一个周末,掌握 OpenFeign 核心原理 - 花一个周末,掌握 SpringCloud Ribbon 核心原理

设计模式实战 - 设计模式介绍 - 摊牌了!策略模式在项目设计中用得最多 - 春节期间,我用责任链模式重构了业务代码 - 火遍全网的 Hutool,如何使用 Builder 模式创建线程池 - 放弃 EventBus,选择更优雅的 ApplicationEvent - 如何通俗易懂理解什么是 SPI 模式 - 学习 Mybatis 动态代理扩展拒绝策略 - 设计模式抽象 - 死磕设计模式之如何抽象策略模式 - 死磕设计模式之如何抽象责任链模式

开发规约 - Git 使用操作规约 - 框架版本号定义 - 写一手好文档必备的规约 - 阿里 P7 也在用的编码规约 - 代码整洁为什么如此重要 - 如何提升代码质量

👍 模块分类

刚果商城项目是马哥从零到一写出来的,当前已开发模块如下所述,没有完成的请耐心等待。

| | 模块名称 | 服务名称 | 访问地址 | | ---- | ----------------------- | --------------------------------- | ---------------------------------------------- | | 1 | congomall-message | 消息发送 eg:邮件、公众号、短信等 | http://localhost:8001 | | 2 | congomall-customer-user | 用户服务 | http://localhost:8002 | | 3 | congomall-gateway | 外部网关 | http://localhost:8003 | | 4 | congomall-product | 商品服务 | http://localhost:8004 | | 5 | congomall-product-job | 商品 Job 服务 | http://localhost:9001 | | 6 | congomall-cart | 购物车服务 | http://localhost:8005 | | 7 | congomall-order | 订单服务 | http://localhost:8006 | | 8 | congomall-pay | 支付服务 | http://localhost:8007 | | 9 | congomall-basic-data | 基础数据服务 | http://localhost:8008 |

🚅 接口请求

目前刚果商城已开发的接口已汇总至下述接口文档中,本地启动对应项目,通过接口文档访问查看效果。

https://www.apifox.cn/web/project/1038592/apis/api-50106328-run

如果需要通过 Apifox 直接调用,需要安装对应浏览器内网插件,这里把插件安装包装上,跟着教程安装即可使用。

安装文档:https://www.apifox.cn/help/app/web/browser-extension

🛡 模块介绍

刚果商城后端系统模块介绍如下所示。

image

📈 技术选型

当前暂时先梳理后端技术,前端开发后再行梳理。

| | 技术 | 名称 | 官网 | | ---- | ------------------- | ---------------------- | ------------------------------------------------------------ | | 1 | Spring Boot | 基础框架 | https://spring.io/projects/spring-boot | | 2 | MyBatis-Plus | 持久层框架 | https://baomidou.com | | 3 | HikariCP | 数据库连接池 | https://github.com/brettwooldridge/HikariCP | | 4 | Redis | 分布式缓存数据库 | https://redis.io | | 5 | RocketMQ | 消息队列 | https://rocketmq.apache.org | | 6 | ShardingSphere | 数据库生态系统 | https://shardingsphere.apache.org | | 7 | SpringCloud Alibaba | 分布式框架 | https://github.com/alibaba/spring-cloud-alibaba | | 8 | SpringCloud Gateway | 网关框架 | https://spring.io/projects/spring-cloud-gateway | | 9 | Seata | 分布式事务框架 | http://seata.io/zh-cn/index.html | | 10 | Canal | MySQL 订阅 BinLog 组件 | https://github.com/alibaba/canal | | 11 | MinIO | 文件存储框架 | https://min.io | | 12 | Swagger3 | 项目 API 文档框架 | http://swagger.io | | 13 | Knife4j | Swagger 增强框架 | https://doc.xiaominfo.com | | 14 | Maven | 项目构建管理 | http://maven.apache.org | | 15 | Redisson | Redis Java 客户端 | https://redisson.org | | 16 | Sentinel | 流控防护框架 | https://github.com/alibaba/Sentinel | | 17 | Hippo4j | 动态线程池框架 | https://hippo4j.cn | | 18 | XXL-Job | 分布式定时任务框架 | http://www.xuxueli.com/xxl-job | | 19 | SkyWalking | 分布式链路追踪框架 | https://skywalking.apache.org |

🔍 项目功能

这是刚写这个项目的时候出的一版功能图,当前已不再维护,可以作为一个基础入门的参考。