# congomall **Repository Path**: justin1001/congomall ## Basic Information - **Project Name**: congomall - **Description**: 🔥🔥🔥 CongoMall(刚果商城)基于 DDD 开发的商城系统,内置分布式锁、分布式事务、分库分表、消息队列、数据搜索、服务监控等功能。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: https://magestack.cn - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 473 - **Created**: 2023-03-24 - **Last Updated**: 2023-03-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 🚀 系统介绍 --- 刚果商城是个从零到一的C端商城项目,包含商城核心业务和基础架构两个大模块。 #### 1. 商城业务 参照商城系统原型,相继推出用户、消息、商品、订单、优惠券、支付、网关、购物车 等业务模块,通过商城系统中复杂场景,给出对应解决方案。并在多个业务模块中使用 DDD 开发,梳理业务模型,帮助对 DDD 一知半解的开发者树立正确的开发思路。 #### 2. 场景实战 代码中有着工作中遇到或者帮助他人已解决的,不同场景下的“疑难病症”,梳理出对应解决方案,并把对应代码放在刚果商城这个系统里。 - 线上应用运行触发 OOM(内存溢出或泄漏),如何第一时间通知到开发者? - 订单业务根据买家 ID 进行分库分表,如何支持订单 ID 高效查询记录? - 如何将千万数据通过并发的形式高性能导入三方数据库?比如 ElasticSearch。 - 面试高频考点:如何结合复杂业务场景解决缓存穿透、缓存雪崩、缓存击穿? - ...... #### 3. 基础架构 项目中会带着大家造很多的“轮子”,包括不限于:规约、缓存、公共、分布式 ID、数据持久层、脱敏、日志、文档等组件,希望大家能够独立完成基础组件封装。 - 参考阿里体系实现异常、异常码规则自定义,规避项目异常和异常码体系混乱。 - 封装分布式缓存操作,实现安全保存、获取缓存操作,规避缓存穿透和缓存击穿。 - 抽象多种常用设计模式,统一在组件库初始化资源,规避客户端项目重复代码。 - 封装日志打印功能注解,可自定义输出请求方法、入参、出参以及执行时间等详细参数。 - ...... #### 4. 设计模式 设计模式在项目中占据的比重一样不小,会根据不同的业务场景带大家掌握常用的设计模式,比如:单例、观察者、工厂、构建者、责任链、策略、模板方法、装饰器、动态代理等。每种设计模式都会有理论讲解文章以及搭配场景实战,保障逻辑清晰易懂。避免部分同学出现看了懂,上手难的情况。 - 订单创建使用责任链模式验证参数必填、参数正确性、商品库存是否正确等逻辑。 - 通过策略模式封装支付回调场景,三方支付平台回调时动态选择对应的回调组件。 - 通过装饰器模式构建本地 JVM 内存以及分布式 Redis 缓存多级封装。 - 通过动态代理增强线程池拒绝策略,比如:拒绝任务报警或加入延迟队列重复放入等逻辑。 - ...... ### 🔨 系统架构 --- ![](https://images-machen.oss-cn-beijing.aliyuncs.com/1673165270664-5d0c4381-96ef-427b-a58d-9b21140eabe0-20230306173625527.png) ### 🎉 文档 --- 注:文章里 TODO 的是还没写(耐心等待更新吧) - 入门准备 - [加入交流群](https://magestack.cn/preparation/group.html) - [初始化数据库](https://magestack.cn/preparation/init-datasource.html) - 环境搭建 - [MySQL 5.7.x 简易安装部署](https://magestack.cn/preparation/environment/mysql_5.7_install.html) - [Redis 简易安装部署](https://magestack.cn/preparation/environment/redis_latest_install.html) - [RocketMQ 4.5.1 安装部署](https://magestack.cn/preparation/environment/rocketmq_4.5.1_install.html) - [Nacos 2.1.1 安装部署](https://magestack.cn/preparation/environment/nacos_2.1.1_install.html) - [Sentinel 1.8.4 安装部署](https://magestack.cn/preparation/environment/sentinel_1.8.4_install.html) - [MinIO 安装部署](https://magestack.cn/preparation/environment/minio_latest_install.html) - [Prometheus 安装部署](https://magestack.cn/preparation/environment/prometheus_latest_install.html) - [Grafana 安装部署](https://magestack.cn/preparation/environment/grafana_latest_install.html) - [Seata 1.5.2 安装部署](https://magestack.cn/preparation/environment/seata_1.5.2_install.html) - [Canal 1.1.5 安装部署](https://magestack.cn/preparation/environment/canal_1.1.5_install.html) - [SkyWalking 9.3.0 安装部署](https://magestack.cn/preparation/environment/sky-walking_9.3.0_install.html) - [XXL-Job 2.3.1 安装部署](https://magestack.cn/preparation/environment/xxl-job_2.3.1_install.html) - 项目说明 - [接口文档说明](https://magestack.cn/preparation/explain/interface-docs.html) - [技术架构选型](https://magestack.cn/preparation/explain/interface-docs.html) - [项目结构说明](https://magestack.cn/preparation/explain/item-structured.html) - [商品 SPU、SKU 之间的区别](https://magestack.cn/preparation/explain/product-sku-spu.html) - 快速开始 - [用户服务](https://magestack.cn/fast-start/user.html) - [购物车服务](https://magestack.cn/fast-start/cart.html) - [商品服务](https://magestack.cn/fast-start/product.html) - [消息服务](https://magestack.cn/fast-start/message.html) - [订单服务](https://magestack.cn/fast-start/order.html) - [支付服务](https://magestack.cn/fast-start/pay.html) - 系统设计 - [数据库设计](https://magestack.cn/system-design/database.html) - 通用系统设计 - [SpringBoot 封装 Web 请求通用返回](https://magestack.cn/system-design/common/result.html) - [SpringBoot 封装项目统一异常处理](https://magestack.cn/system-design/common/exception.html) - 用户系统设计 - [电商平台亿级用户如何分库分表](https://magestack.cn/system-design/user/sharding.html) - 商品系统设计 - [如何解决商品秒杀库存超卖问题](https://magestack.cn/system-design/product/inventory-oversold.html) - [亿级商品数据如何快速同步三方数据库](https://magestack.cn/system-design/product/sync-other-database.html) - 订单系统设计 - [订单&明细表数据如何进行分库分表](https://magestack.cn/system-design/order/sharding.html) - [如何实现订单 15 分钟未支付自动取消](https://magestack.cn/system-design/order/timing-canal.html) - [服务端如何解决用户下单重复](https://magestack.cn/system-design/order/user-order-repetition.html) - [如何保证消息队列不被重复消费](https://magestack.cn/system-design/order/mq-repetition.html) - 支付系统设计 - 消息系统设计 - [架构师设计的百万数据量安全导入](https://magestack.cn/system-design/message/import.html) - [架构师设计的百万数据量安全导出](https://magestack.cn/system-design/message/export.html) - 场景实战 - 并发编程 - [参考 Dubbo 线程池模型实现快速消费线程池](https://magestack.cn/scene/thread/dubbo-fast-consumer.html) - [线程池如何监控,才能帮助开发者快速定位错误](https://magestack.cn/scene/thread/thread-pool-monitor.html) - [揭秘 Java8 ParallelStream 并行流极端情况串行化](https://magestack.cn/scene/thread/parallel-stream.html) - 分布式架构 - [如何保证雪花算法集群环境下不重复](https://magestack.cn/scene/distributed/snowflake.html) - [彻底掌握分布式事务 2PC、3PC 模型](https://magestack.cn/scene/distributed/23pc.html) - 应用安全 - [如何防止数据库敏感信息泄漏](https://magestack.cn/scene/data-safety/database.html) - [如何防止配置文件敏感信息泄漏](https://magestack.cn/scene/data-safety/config-file.html) - [如何实现前端返回数据脱敏](https://magestack.cn/scene/data-safety/front.html) - 生产问题 - [为什么线上异常信息为空,而本地可以正常打印](https://magestack.cn/scene/prod-issue/jvm-fast-throw.html) - [应用出现 OOM 异常,程序员如何第一时间知道](https://magestack.cn/scene/prod-issue/jvm-oom.html) - [核心接口请求出错,结果忘记打印相关日志](https://magestack.cn/scene/prod-issue/log.html) - 数据库 - [MySQL 单表千万数据量如何深分页优化](https://magestack.cn/scene/database/deep-page.html) - [MyBatis 千万数据量查询不发生内存溢出](https://magestack.cn/scene/database/mybatis-query.html) - 分库分表 - [分库分表如何实现平滑上线 & 回滚](https://magestack.cn/scene/sharding/smooth-sharding.html) - [按照时间分库分表,如何按照 ID 查询记录](https://magestack.cn/scene/sharding/complex-sharding.html) - [按照用户分库分表,如何按照订单 ID 查询记录](https://magestack.cn/scene/sharding/gene-sharding.html) - 本地&分布式缓存 - [如何解决缓存穿透&击穿&雪崩](https://magestack.cn/scene/cache/issue.html) - [说说布隆过滤器查询误判和数据不能删除解决方案](https://magestack.cn/scene/cache/bloom-filter.html) - [如何通过 Caffeine & Redis 实现多级缓存](https://magestack.cn/scene/cache/multistage-cache.html) - [缓存和数据库一致性问题如何解决](https://magestack.cn/scene/cache/consistency.html) - 源码解析 - [MyBatis 整体架构设计分享](https://magestack.cn/scene/source-code/mybatis.html) - [花一个周末,掌握 OpenFeign 核心原理](https://magestack.cn/scene/source-code/openfeign.html) - [花一个周末,掌握 SpringCloud Ribbon 核心原理](https://magestack.cn/scene/source-code/ribbon.html) - 设计模式实战 - 设计模式介绍 - [摊牌了!策略模式在项目设计中用得最多](https://magestack.cn/design-pattern/explain/strategy.html) - [春节期间,我用责任链模式重构了业务代码](https://magestack.cn/design-pattern/explain/chain.html) - [火遍全网的 Hutool,如何使用 Builder 模式创建线程池](https://magestack.cn/design-pattern/explain/builder.html) - [放弃 EventBus,选择更优雅的 ApplicationEvent](https://magestack.cn/design-pattern/explain/observer.html) - [如何通俗易懂理解什么是 SPI 模式](https://magestack.cn/design-pattern/explain/spi.html) - [学习 Mybatis 动态代理扩展拒绝策略](https://magestack.cn/design-pattern/explain/mybatis-proxy.html) - 设计模式抽象 - [死磕设计模式之如何抽象策略模式](https://magestack.cn/design-pattern/abstract/strategy.html) - [死磕设计模式之如何抽象责任链模式](https://magestack.cn/design-pattern/abstract/chain.html) - 开发规约 - [Git 使用操作规约](https://magestack.cn/convention/git.html) - [框架版本号定义](https://magestack.cn/convention/frame-version.html) - [写一手好文档必备的规约](https://magestack.cn/convention/docs.html) - [阿里 P7 也在用的编码规约](https://magestack.cn/convention/coding.html) - [代码整洁为什么如此重要](https://magestack.cn/convention/code-format.html) - [如何提升代码质量](https://magestack.cn/convention/check-style.html) ### 👍 模块分类 --- 上文有说,刚果商城项目是马哥从零到一写出来的,当前已开发模块如下所述,没有完成的请耐心等待。 | | 模块名称 | 服务名称 | 访问地址 | | --- | ----------------------- | --------------------------------- | ---------------------------------------------- | | 1 | congomall-message | 消息发送 eg:邮件、公众号、短信等 | [http://localhost:8001](http://localhost:8001) | | 2 | congomall-customer-user | 用户服务 | [http://localhost:8002](http://localhost:8002) | | 3 | congomall-gateway | 外部网关 | [http://localhost:8003](http://localhost:8003) | | 4 | congomall-product | 商品服务 | [http://localhost:8004](http://localhost:8004) | | 5 | congomall-product-job | 商品 Job 服务 | [http://localhost:9001](http://localhost:9001) | | 6 | congomall-cart | 购物车服务 | [http://localhost:8005](http://localhost:8005) | | 7 | congomall-order | 订单服务 | [http://localhost:8006](http://localhost:8006) | | 8 | congomall-pay | 支付服务 | [http://localhost:8007](http://localhost:8007) | ### 🚅 接口请求 --- 目前刚果商城已开发的接口已汇总至下述接口文档中,本地启动对应项目,通过接口文档访问查看效果。 [https://www.apifox.cn/web/project/1038592/apis/api-50106328-run](https://www.apifox.cn/web/project/1038592/apis/api-50106328-run) 如果需要通过 Apifox 直接调用,需要安装对应浏览器内网插件,这里把插件安装包装上,跟着教程安装即可使用。 安装文档:[https://www.apifox.cn/help/app/web/browser-extension](https://www.apifox.cn/help/app/web/browser-extension) ![](https://images-machen.oss-cn-beijing.aliyuncs.com/1673619450701-2c7d5fe3-bf39-4c79-84e8-2ae4f0211a79.png) ### 🛡 模块介绍 --- 刚果商城后端系统模块介绍如下所示。 image ### 📈 技术选型 --- 当前暂时先梳理后端技术,前端开发后再行梳理。 | | 技术 | 名称 | 官网 | | --- | ------------------- | ---------------------- | -------------------------------------------------------------------------------------------------- | | 1 | Spring Boot | 基础框架 | [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) | | 2 | MyBatis-Plus | 持久层框架 | [https://baomidou.com](https://baomidou.com) | | 3 | HikariCP | 数据库连接池 | [https://github.com/brettwooldridge/HikariCP](https://github.com/brettwooldridge/HikariCP) | | 4 | Redis | 分布式缓存数据库 | [https://redis.io](https://redis.io) | | 5 | RocketMQ | 消息队列 | [https://rocketmq.apache.org](https://rocketmq.apache.org) | | 6 | ShardingSphere | 数据库生态系统 | [https://shardingsphere.apache.org](https://shardingsphere.apache.org) | | 7 | SpringCloud Alibaba | 分布式框架 | [https://github.com/alibaba/spring-cloud-alibaba](https://github.com/alibaba/spring-cloud-alibaba) | | 8 | SpringCloud Gateway | 网关框架 | [https://spring.io/projects/spring-cloud-gateway](https://spring.io/projects/spring-cloud-gateway) | | 9 | Seata | 分布式事务框架 | [http://seata.io/zh-cn/index.html](http://seata.io/zh-cn/index.html) | | 10 | Canal | MySQL 订阅 BinLog 组件 | [https://github.com/alibaba/canal](https://github.com/alibaba/canal) | | 11 | MinIO | 文件存储框架 | [https://min.io](https://min.io) | | 12 | Swagger3 | 项目 API 文档框架 | [http://swagger.io](http://swagger.io) | | 13 | Knife4j | Swagger 增强框架 | [https://doc.xiaominfo.com](https://doc.xiaominfo.com/) | | 14 | Maven | 项目构建管理 | [http://maven.apache.org](http://maven.apache.org) | | 15 | Redisson | Redis Java 客户端 | [https://redisson.org](https://redisson.org/) | | 16 | Sentinel | 流控防护框架 | [https://github.com/alibaba/Sentinel](https://github.com/alibaba/Sentinel) | | 17 | Hippo4j | 动态线程池框架 | [https://hippo4j.cn](https://hippo4j.cn) | | 18 | XXL-Job | 分布式定时任务框架 | [http://www.xuxueli.com/xxl-job](http://www.xuxueli.com/xxl-job) | | 19 | SkyWalking | 分布式链路追踪框架 | [https://skywalking.apache.org](https://skywalking.apache.org/) | ### 🔍 项目功能 --- 这是刚写这个项目的时候出的一版图,当前已不再维护,可以作为一个基础入门的参考。 ![](https://user-images.githubusercontent.com/77398366/226890631-31eb817b-b84f-4220-b69b-dfb094813fbd.png)