File tree 7 files changed +49
-1
lines changed
public/images/article/project/big-market
7 files changed +49
-1
lines changed Original file line number Diff line number Diff line change @@ -2154,6 +2154,7 @@ function getBarBigMarket() {
2154
2154
"api/第13节:引入分库分表路由组件.md" ,
2155
2155
"api/第14节:抽奖活动订单流程设计.md" ,
2156
2156
"api/第15节:抽奖活动流水入库.md" ,
2157
+ "api/第16节:引入MQ处理活动SKU库存一致性.md" ,
2157
2158
"none.md" ,
2158
2159
]
2159
2160
} ,
Original file line number Diff line number Diff line change
1
+ ---
2
+ title : 第16节:引入MQ处理活动SKU库存一致性
3
+ pay : https://t.zsxq.com/188e3DFyj
4
+ ---
5
+
6
+ # 《大营销平台系统设计实现》 - 营销服务 第16节:引入MQ处理活动SKU库存一致性
7
+
8
+ 作者:小傅哥
9
+ <br />博客:[ https://bugstack.cn ] ( https://bugstack.cn )
10
+
11
+ > 沉淀、分享、成长,让自己和他人都能有所收获!😄
12
+
13
+ - ** 本章难度** :★★★☆☆
14
+ - ** 本章重点** :引入 RabbitMQ 消息组件,在活动SKU库存消耗完毕后,触发消息推送更新库存为最终一致。
15
+ - ** 课程视频** :[ https://t.zsxq.com/18gaoKYEn ] ( https://t.zsxq.com/18gaoKYEn )
16
+
17
+ ** 版权说明** :©本项目与星球签约合作,受[ 《中华人民共和国著作权法实施条例》] ( http://www.gov.cn/zhengce/2020-12/26/content_5573623.htm ) 版权法保护,禁止任何理由和任何方式公开(public)源码、资料、视频等内容到Github、Gitee等,违反可追究进一步的法律行动。
18
+
19
+ ## 一、本章诉求
20
+
21
+ 完成活动责任链判断,包括;活动的校验【日期、状态、sku库存】,之后是sku 库存的扣减操作。 之后这里会涉及一个缓存库存和数据库库存一致性问题,是本节要处理的重点。一个手段是之前在策略实现阶段采用的延迟队列做趋势更新,另外一个是本节要引入 RabbitMQ 在库存消耗空以后发送 MQ 消息,直接更新清空最终库存,保持缓存与数据库的一致性。
22
+
23
+ ** 注意** ,可能此时缓存消耗库存阶段有失败丢失,不完全等于数据库真实库存。不过没关系,先保证一个统一库存即可。后续可以扫描统计订单数量,来校准库存。
24
+
25
+ ## 二、功能流程
26
+
27
+ 完善责任链功能,和库存数据一致性的处理;
28
+
29
+ <div align =" center " >
30
+ <img src="https://bugstack.cn/images/article/project/big-market/big-market-23-01.png" width="850px">
31
+ </div >
32
+
33
+ - 第一步;完成责任链的活动校验,时间、状态、库存。
34
+ - 第二步;对库存的扣减,使用 decr + lock 锁的方式(兜底)进行处理。
35
+ - 第三步;做完库存扣减后,发送延迟队列,由任务调度更新趋势库存,满足最终一致。
36
+ - 第四步;库存消耗为0后,发送MQ消息,驱动变更数据库库存为0
Original file line number Diff line number Diff line change @@ -140,4 +140,13 @@ DDD 中的依赖倒置是一个非常好的设计,尤其是与 MVC 结构对
140
140
141
141
- 第1个手段;每次消费incr值,写入延迟队列,趋势更新数据库数据。最终一致。
142
142
- 第2个手段;incr 库存值消耗为0时,发送mq消息,更新最终库存量。(可能不准,比如incr值消耗中,少卖的情况)
143
- - 第3个手段;活动到期后,任务扫描活动产生订单量,校准库存。
143
+ - 第3个手段;活动到期后,任务扫描活动产生订单量,校准库存。
144
+
145
+ ### 【其他】3. 什么情况下使用DDD架构,什么情况下使用mvc架构?
146
+
147
+ DDD 是软件设计方法,对复杂的项目更为合适。但这里要清楚,DDD 如果只的是设计方法中的建模工程结构,和 MVC 对比的话。DDD 的结构更为先进,即使不使用 DDD 的软件设计方法,只遵循这套结构,都是可以编写出非常好的代码的。MVC 的约束相对较低,个人开发还好,如果多人协作,会出现腐化严重的问题。
148
+
149
+ ### 【其他】4. 设计模式带来了什么好处?举个例子
150
+
151
+ 设计模式可以让工程设计的迭代性、扩展性、维护性,都更强,更好。如,抽奖策略计算中,用到了责任链、组合模式的规则树。规则树可以动态的调整配置的节点,来满足各种业务诉求。还可以结合产品需求,迭代的时候添加对应的节点开发就可以。避免了大量if...else的使用,让变动范围缩小到指定的类中。研发成本更低,提测质量更高(测试更快),交付效率更强。这些都是使用设计模式的优势。
152
+
Original file line number Diff line number Diff line change @@ -10,6 +10,8 @@ lock: need
10
10
11
11
> 沉淀、分享、成长,让自己和他人都能有所收获!😄
12
12
13
+ <iframe id =" B-Video " src =" //player.bilibili.com/player.html?aid=1902486427&bvid=BV1Gm411r7kz&cid=1484158643&p=1 " scrolling =" no " border =" 0 " frameborder =" no " framespacing =" 0 " allowfullscreen =" true " width =" 100% " height =" 480 " > </iframe >
14
+
13
15
本文的宗旨在于通过简单干净实践的方式教会读者,配置出一套 Canal 工具服务,来同步分库分表的数据到 Elasticsearch 文件夹系统中。同时在 SpringBoot 工程中,配置出两套数据源,一套是 MySQL + MyBatis,一套是 Elasticsearch + MyBatis。【这是非常重要的设计手段】
14
16
15
17
虽然现在有 TiDB 这样的分布式数据库,但对于分库分表 + 数据同步ES,依然是非常主流的方案。同时也有一部分是把分库分表的数据同步到 TiDB 使用。
You can’t perform that action at this time.
0 commit comments