# 《大营销平台系统设计实现》 - 营销服务 第16节:引入MQ处理活动SKU库存一致性

作者:小傅哥
博客:https://bugstack.cn (opens new window)

沉淀、分享、成长,让自己和他人都能有所收获!😄

版权说明:©本项目与星球签约合作,受《中华人民共和国著作权法实施条例》 (opens new window) 版权法保护,禁止任何理由和任何方式公开(public)源码、资料、视频等内容到Github、Gitee等,违反可追究进一步的法律行动。

# 一、本章诉求

完成活动责任链判断,包括;活动的校验【日期、状态、sku库存】,之后是sku 库存的扣减操作。 之后这里会涉及一个缓存库存和数据库库存一致性问题,是本节要处理的重点。一个手段是之前在策略实现阶段采用的延迟队列做趋势更新,另外一个是本节要引入 RabbitMQ 在库存消耗空以后发送 MQ 消息,直接更新清空最终库存,保持缓存与数据库的一致性。

注意,可能此时缓存消耗库存阶段有失败丢失,不完全等于数据库真实库存。不过没关系,先保证一个统一库存即可。后续可以扫描统计订单数量,来校准库存。

# 二、功能流程

完善责任链功能,和库存数据一致性的处理;

  • 第一步;完成责任链的活动校验,时间、状态、库存。
  • 第二步;对库存的扣减,使用 decr + lock 锁的方式(兜底)进行处理。
  • 第三步;做完库存扣减后,发送延迟队列,由任务调度更新趋势库存,满足最终一致。
  • 第四步;库存消耗为0后,发送MQ消息,驱动变更数据库库存为0