从零到一不一样的TOC商城项目:Cloud-Alibaba+DDD,私活利器开源

2023-11-04

刚果商城,不一样的商城系统

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

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

 

能学到什么


刚果商城系统是我从事开发以来,在实际工作中遇到各种场景问题的“疑难杂症”汇总。

这些问题有些是自己遇到的,有些是其他人遇到帮忙解决的,最终把解决方案和代码实战放在刚果商城这个系统里。

这个系统没有很完整的商城业务,但是提供了偏架构层面有用的工具和参考,能帮助大家在实际项目中更好地解决问题。

如果你能够认真且坚持把项目看完,我相信你会收获包括不限于下面这些知识点:

  • 基于 DDD 领域驱动模型设计实现的商品、购物车、订单、用户、消息以及支付服务。

  • 掌握分布式锁、分布式事务、分布式搜索、分布式缓存、分布式限流以及分库分表等核心技术。

  • 完成基础组件抽象,规约、缓存、幂等、分布式 ID、数据持久层、脱敏以及日志等底层组件库。

  • 基于 Agent 开发字节码流量监控,监控项目接口 QPS、响应时间和异常请求等核心指标。

  • 掌握常用设计模式实战场景,策略、责任链、装饰器、观察者以及适配器等设计模式。

如何开始


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

  • 商城业务:通过学习刚果商城中复杂业务处理场景,增加自己的复杂业务处理能力。

  • 基础架构:尝试跟着基础架构部分自己把轮子都造一遍,以此提高自己方案设计和公共代码开发能力。

1)商城核心业务

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

  1. 初始化数据库,比如商品库、订单库、用户库、支付库、购物车库等;

  2. 通过 Docker 安装项目中依赖的中间件,比如 Nacos2、MySQL、Seata、RocketMQ 等;

  3. 学习接口调用流程,项目接口目前全量放入 Apifox 软件中,可通过在线访问;

  4. 查看不同微服务之间的依赖关系,并根据文档中的描述进行修改指定参数;

  5. 找到自己感兴趣的模块功能 Debug 源代码,参考代码设计。

添加图片注释,不超过 140 字(可选)

2)基础架构

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

添加图片注释,不超过 140 字(可选)

服务列表


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

模块名称

服务名称

访问地址

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

10

congomall-bff

商城聚合层(BFF)

http://localhost:8009

接口请求


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

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

如果需要通过 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

基础框架

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

20

JetCache

Java 缓存框架

https://github.com/alibaba/jetcache

                                                                                                          资源获取:
大家 点赞、收藏、关注、评论啦 、 查看
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从零到一不一样的TOC商城项目:Cloud-Alibaba+DDD,私活利器开源 的相关文章

随机推荐

  • PyTorch 提取中间层特征?

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 来源 机器学习算法与自然语言处理 编辑 忆臻 https www zhihu com question 68384370 本文仅作为学术分享 如果侵权 会删文处理 PyT
  • TCP/IP详解学习笔记

    TCP IP详解学习笔记 http blog csdn net goodboy1881 category 204448 aspx PageNumber 2 TCP IP详解学习笔记 3 IP协议 ARP协议 RARP协议 摘要 TCP IP
  • C#在linux上运行实现

    1 C 开发完了服务 2 部署到linux centos7上 3无法直接运行 解决方法 1 linux cenos7上安装mono 2 执行mono xxx exe 即可 解决方法2 下载 anyexec 1 2 linux x64 tar
  • C语言 leetcode刷题篇 删除有序数组中的重复项

    给你一个 升序排列 的数组 nums 请你 原地 删除重复出现的元素 使每个元素 只出现一次 返回删除后数组的新长度 元素的 相对顺序 应该保持 一致 由于在某些语言中不能改变数组的长度 所以必须将结果放在数组nums的第一部分 更规范地说
  • 跨域 访问总结

    文章转载自https segmentfault com a 1190000011145364 什么是跨域 跨域是指一个域下的文档或脚本试图去请求另一个域下的资源 这里跨域是广义的 广义的跨域 1 资源跳转 A链接 重定向 表单提交 2 资源
  • Mybatis从头到尾(一)--MyBatis简介及项目搭建

    一 简介 MyBatis的前身是iBATIS 是ClintonBegin在2001年发起的一个开源项目 最初侧重于密码软件的开发 后来发展成为一款基于Java的持久层框架 2004年 Clinton将iBATIS的名字和源码捐赠给了Apac
  • labelme 5.0.1版本指南(二)labelme快捷键详解与修改

    如何自定义labelme的快捷键 非常简单也很实用 吐槽一下Ctrl J创建 Ctrl N编辑 对我的键盘很不友好 路径文件名是这个是这个 home mac labelmerc 打开以后可以看到各种快捷键 shortcuts close C
  • 深度学习06-pytorch从入门到精通

    文章目录 概述 环境准备 安装cuda和cudnn 安装pytorch 基础 张量 定义 numpy转换 数学函数 随机数 计算函数 矩阵处理函数 自动梯度 案例 计算图 torchvision模块 Transforms DataSet D
  • 鲜为人知的编程真相(转载)

    当程序员的经历让我知道了一些关于软件编程的事情 下面的这些事情可能会让朋友们对软件开发感到惊讶 一个程序员用在写程序上的时间大概占他的工作时间的10 20 大部分的程序员每天大约能写出10 12行的能进入最终的产品的代码 不管他的技术水平有
  • 数据量超过亿级别,MySQL大表迁移该如何做?

    MySQL 作为当前应用最广泛的开源关系型数据库之一 具有高性能 稳定性和易用性等特性 是许多网站 应用和商业产品的主要数据存储 在一些场景中 如果出现单表行数上亿的情况 就可能需要开发和 DBA 对大表进行优化 分表 归档或扩容操作 而在
  • std::shared_ptr 和 std::weak_ptr的用法以及引用计数的循环引用问题

    在std shared ptr被引入之前 C 标准库中实现的用于管理资源的智能指针只有std auto ptr一个而已 std auto ptr的作用非常有限 因为它存在被管理资源的所有权转移问题 这导致多个std auto ptr类型的局
  • 一文解决linux下mysql FEDERATED 存储引擎的配置和使用(笔者亲测有效)

    C C 气象数据中心实战工业级项目系列文章目录 第五章 解决linux下mysql FEDERATED 存储引擎的配置和使用 文章目录 C C 气象数据中心实战工业级项目系列文章目录 一 linux下mysql FEDERATED 存储引擎
  • 华为OD机试 - 文件目录大小(Python)

    题目描述 一个文件目录的数据格式为 目录id 本目录中文件大小 子目录id列表 其中目录id全局唯一 取值范围 1 200 本目录中文件大小范围 1 1000 子目录id列表个数 0 10 例如 1 20 2 3 表示目录1中文件总大小是2
  • ubuntu 下 opencv的安装以及配置(亲测有效)

    当在Ubuntu上安装OpenCV时 可以按照以下详细步骤进行操作 1 更新apt包列表 sudo apt update 这将更新系统的包列表 确保可以获取到最新的软件包信息 2 安装所需依赖项 sudo apt install build
  • Vue命名规范

    JS文件命名 一般采用的是小驼峰命名法 如 pieChartHelp 第一个单词小写 其他单词首字母大写 Components 文件命名 一般采用的是大驼峰命名法 如PieChart 所有单词的首字母大写 常量命名 一般全部大写 每个单词使
  • 目标检测YOLO实战应用案例100讲-无监督领域自适应目标检测方法研究与应用

    目录 无监督领域自适应目标检测方法研究 领域自适应目标检测 目标检测相关技术介绍
  • 数学建模之主成分分析(matlab算法)

    主成分分析是一种降维算法 它能将多个指标转换为少数几个主成分 这些主成分是原始变量的线性组合 且彼此之间互不相关 其能反映出原始数据的大部分信息 一般来说 当研究的问题涉及到多变量且变量之间存在很强的相关性时 我们可以考虑使用主成分分析的方
  • 非对称加密算法

    文章目录 概述 DH Diffie Hellman 秘钥交换算法 RSA 基于因子分解 ElGamal 基于离散对数 ECC Elliptical Curve Cryptography 椭圆曲线加密 概述 对称加密算法是因为秘钥的对称而由来
  • alpha shapes提取平面点云边界点

    1 原理介绍 由Edelsbrunner H提出的alpha shapes算法是一种简单 有效的快速提取边界点算法 其克服了点云边界点形状影响的缺点 可快速准确提取边界点 其原理如下 如下图所示 对于任意形状的平面点云 若一个半径为a的圆
  • 从零到一不一样的TOC商城项目:Cloud-Alibaba+DDD,私活利器开源

    刚果商城 不一样的商城系统 刚果商城是个从零到一的商城项目 包含商城核心业务和基础架构两大模块 参照商城系统原型 推出用户 消息 商品 订单 优惠券 支付 网关 购物车等业务模块 通过商城系统中复杂场景 给出对应解决方案 使用 DDD 模型