原因:开源不易,文档仅对已 Star 刚果商城项目的用户开放。
操作步骤:点击下方「Gitee 项目」和「GitHub 项目」按钮 Star 项目即可。 刚果商城所有端的代码都会完全开源,为了更好地完善这个框架,希望大家多多支持。
用户服务,提供验证码发送、用户注册、用户登录以及收获地址管理等能力。
├── congomall-customer-user
│ ├── congomall-customer-user-application # 用户服务应用层
│ ├── congomall-customer-user-domain # 用户服务领域层
│ ├── congomall-customer-user-infrastructure # 用户服务基础层
│ ├── congomall-customer-user-interface # 用户服务用户接口层
│ ├── congomall-customer-user-mock # 用户服务数据模拟层
congomall-customer-user-interface
为可独立部署的应用。
1)项目依赖。
启动用户服务前需启动下述模块。
congomall-message
:消息服务。2)组件依赖。
Sentinel
Nacos
Redis
RocketMQ
SkyWalking 可选
验证码发送默认在配置文件中指定,用户可自定义。
customer.user.register.verify.sender
:验证码发送邮箱账户1)用户数据使用 ShardingSphere 框架 HASH_MOD 分片算法对用户 ID 进行分片。
2)用户相关敏感信息采用 ShardingSphere 框架 AES 加密算法对手机号、邮箱字段进行加密存储。
3)用户验证码发送使用策略模式、模板方法模式抽象。
org.opengoofy.congomall.biz.customer.user.web.controller.CustomerUserController.verifyCodeSend
4)用户变更日志通过 RocketMQ 异步存储。
org.opengoofy.congomall.biz.customer.user.infrastructure.mq.produce.CustomerUserOperationLogProduce.recordCustomerUserOperationLog
购物车服务,提供购物车新增、查询、修改以及删除等能力。
├── congomall-cart
│ ├── congomall-cart-application # 购物车服务应用层
│ ├── congomall-cart-domain # 购物车服务领域层
│ ├── congomall-cart-infrastructure # 购物车服务基础层
│ ├── congomall-cart-interface # 购物车服务用户接口层
congomall-cart-interface
为可独立部署的应用。
1)项目依赖。
无。
2)组件依赖。
Sentinel
Nacos
Seata
SkyWalking 可选
无。
1)购物车表按照用户 ID HASH_MODE 方式分表。
商品服务,提供商品分类查询、商品详情查询、商品库存查询等能力。
├── congomall-product
│ ├── congomall-product-application # 商品服务应用层
│ ├── congomall-product-domain # 商品服务领域层
│ ├── congomall-product-infrastructure # 商品服务基础层
│ ├── congomall-product-interface # 商品服务用户接口层
│ ├── congomall-product-job # 商品服务任务层
congomall-product-interface
、congomall-product-job
都是可独立部署的应用。
1)项目依赖。
无。
2)组件依赖。
Sentinel
Nacos
Seata
SkyWalking
如果 XXL-Job 为 Docker 部署,需要修改以下属性。
congomall-product/congomall-product-job/src/main/resources/application.properties
xxl.job.executor.logpath
:替换为本地目录。xxl.job.executor.ip
:替换为本机 ID。1)千万数据通过并发编程高性能导入三方数据库,比如 ElasticSearch。
congomall-product/congomall-product-job/src/main/java/org/opengoofy/congomall/biz/product/job/handler/InitializeProductJobHandler.java
2)商品 SPU 表按照店铺 ID 分表,同时支持按照 ID 分片查询,基于雪花算法基因实现。
org.opengoofy.congomall.biz.product.infrastructure.algorithm.ProductSnowflakeServiceShardingAlgorithm
3)商品 SKU 表按照店铺 ID 分表,同时支持按照商品 ID 分片查询,基于雪花算法基因实现。
org.opengoofy.congomall.biz.product.infrastructure.algorithm.ProductSkuSnowflakeServiceShardingAlgorithm
4)商品评价表按照商品 ID HASH_MODE 方式分表。
消息服务,提供邮箱消息发送、短信消息发送、微信公众号以及微信订阅号发送等能力。
├── congomall-message
│ ├── congomall-message-application # 消息服务应用层
│ ├── congomall-message-domain # 消息服务领域层
│ ├── congomall-message-infrastructure # 消息服务基础层
│ ├── congomall-message-interface # 消息服务用户接口层
congomall-message-interface
为可独立部署的应用。
1)项目依赖。
无。
2)组件依赖。
Sentinel
Nacos
RocketMQ
SkyWalking 可选
邮箱账号发送默认在配置文件中指定,用户可自定义。
spring.mail.username
:发送邮箱账户1)自定义复合分片算法,根据消息 ID 以及消息发送时间分片存储。
复合分片配置文件相对单分片来说,越显复杂,需要仔细梳理配置项。简单来说复合分片的逻辑:通过消息发送时间进行分片存储,同时支持按照消息 ID 精确查询。
org.opengoofy.congomall.biz.message.infrastructure.algorithm.SnowflakeDateShardingAlgorithm
2)消息发送通过 RocketMQ 异步发送,减轻系统压力。
org.opengoofy.congomall.biz.message.infrastructure.mq.consume.MailMessageSendConsume.mailMessageSend
订单服务,提供商品下单、订单查询、订单确认等能力。
├── congomall-order
│ ├── congomall-order-application # 订单服务应用层
│ ├── congomall-order-domain # 订单服务领域层
│ ├── congomall-order-infrastructure # 订单服务基础层
│ ├── congomall-order-interface # 订单服务用户接口层
congomall-order-interface 为可独立部署的应用。
1)项目依赖。
启动订单服务前需启动下述模块:
congomall-cart
:购物车服务。
congomall-product
:商品服务。
2)组件依赖。
Sentinel
Nacos
RocketMQ
Seata
SkyWalking 可选
无。
1)商品下单引入分布式事务。商品服务 -> 购物车服务 -> 商品服务。
2)订单创建使用责任链模式验证参数必填、参数正确性、商品库存是否正确等逻辑。
org.opengoofy.congomall.biz.order.application.service.impl.OrderServiceImpl.createOrder
3)订单创建逻辑使用观察者模式解耦合,基于 Spring ApplicationEvent 实现。
org.opengoofy.congomall.biz.order.application.service.impl.OrderServiceImpl.createOrder
4)商品下单后,通过 RocketMQ 延迟消息关闭订单。
org.opengoofy.congomall.biz.order.infrastructure.mq.provide.DelayCloseOrderProvide
5)订单按照用户 ID 分表,同时支持按照订单号分片查询,基于雪花算法基因实现。
org.opengoofy.congomall.biz.order.infrastructure.algorithm.OrderSnowflakeServiceShardingAlgorithm
6)订单明细表按照订单号 HASH_MOD 方式分表。
支付服务,提供支付宝、微信、银行卡等支付方式,支持支付查询以及退款等功能。
├── congomall-order
│ ├── congomall-pay-application # 支付服务应用层
│ ├── congomall-pay-domain # 支付服务领域层
│ ├── congomall-pay-infrastructure # 支付服务基础层
│ ├── congomall-pay-interface # 支付服务用户接口层
congomall-pay-interface
为可独立部署的应用。
1)项目依赖。
congomall-order
:订单服务。2)组建依赖。
Sentinel
Nacos
RocketMQ
SkyWalking 可选
详情见 支付宝沙箱对接 中需要修改配置项。
核心流程:
1)通过策略模式封装支付渠道和支付场景,用户支付时动态选择对应的支付组件。
org.opengoofy.congomall.biz.pay.application.service.impl.PayServiceImpl#commonPay
2)通过策略模式封装支付回调场景,三方支付平台回调时动态选择对应的支付回调组件。
org.opengoofy.congomall.biz.pay.application.service.impl.PayServiceImpl#callback
项目中已对接支付宝沙箱环境,以下介绍如何对接支付宝沙箱。
1)注册账号。
注册支付宝开发者账户,进入开发者控制台。
https://openhome.alipay.com/platform/developerIndex.htm (opens new window)
直接进入沙箱环境地址。
https://open.alipay.com/develop/sandbox/app (opens new window)
沙箱应用页面如下:
2)获取支付参数。
拿到 APPID 替换 application-dev.properties
文件中 pay.alipay.app-id
。
为了图方便,这里直接使用支付宝自定义公钥和私钥。
我这里是已经开启过的,所以启用按钮是置灰的。第一次使用应该是蓝色可点击的状态。
复制支付宝公钥替换 application-dev.properties
文件中 pay.alipay.alipay-public-key
。
复制应用私钥替换 application-dev.properties
文件中 pay.alipay.private-key
。
至此,就可以调用支付接口进行支付宝支付功能了。
3)调用支付宝接口。
https://www.apifox.cn/web/project/1038592/apis/api-50106328-run (opens new window)
访问支付服务 API,调用支付宝支付接口。
调用支付接口后,新创建 pay.html
空文件,复制控制台日志中前端文件代码到 pay.html
。
通过谷歌浏览器打开 pay.html
即可,看到以下页面即为正常现象。
账户名和支付密码从沙箱账号处复制买方信息。如果买方账户余额为 0,可随意充值金额。
使用账户余额支付即可。
支付结果显示成功。
4)支付结果回调。
如果希望在沙箱环境中得知具体支付结果,我们需要通过 Natapp 开通内网穿透,开通教程详细查看下述官方文档:
https://natapp.cn/article/natapp_newbie (opens new window)
开通后,将内网穿透端口改为 8007,即支付服务项目端口。
将 Natapp 内网穿透地址替换 application-dev.properties
文件下 pay.alipay.notify-url
属性。
再重复调用下支付宝支付接口流程,即可看到回调效果。
BFF 商城聚合服务,对接商城前端项目,提供商城所有功能操作。
├── congomall-bff
│ ├── congomall-bff-biz # 商城BFF业务层
│ ├── congomall-bff-remote # 商城BFF远程调用层
│ ├── congomall-bff-web # 商城BFF接口层
congomall-bff-web
为可独立部署的应用。
1)项目依赖。
启动订单服务前需启动下述模块:
congomall-cart
:购物车服务。
congomall-product
:商品服务。
congomall-order
:订单服务。
congomall-customer-user
:用户服务。
2)组件依赖。
Sentinel
Nacos
SkyWalking 可选
Geetest 验证的 ID 和 Key 变更为自己申请的应用信息,参考 申请 Geetest 应用信息 (opens new window)。
geetest.captcha-id
:Geetest 应用 ID。
geetest.private-key
:Geetest 应用密钥。
无。
🚀 系统提示:访问文档失败 🚀
原因:开源不易,文档仅对已 Star 刚果商城项目的用户开放。
操作步骤:点击下方「Gitee 项目」和「GitHub 项目」按钮 Star 项目即可。 刚果商城所有端的代码都会完全开源,为了更好地完善这个框架,希望大家多多支持。