# 《Seckill秒杀系统》第53章:零侵入重构秒杀商品异步事件后置处理器

作者:冰河
星球:http://m6z.cn/6aeFbs (opens new window)
博客:https://binghe.gitcode.host (opens new window)
文章汇总:https://binghe.gitcode.host/md/all/all.html (opens new window)
源码获取地址:https://t.zsxq.com/0dhvFs5oR (opens new window)

沉淀,成长,突破,帮助他人,成就自我。

  • 本章难度:★★★☆☆
  • 本章重点:重点理解并掌握秒杀商品信息变更后,异步事件后置处理器更新秒杀商品缓存的设计与实现,并掌握在原有设计上零侵入升级并扩展秒杀商品异步事件处理器的思想与实现,并能够灵活运用到自身实际项目中。

大家好,我是冰河~~

秒杀系统由单体项目拆分为微服务之后,对于秒杀商品异步事件后置处理器的实现同样不能仅仅局限于JVM进程内,也需要对这部分的实现升级为分布式架构,并且同样需要对原有的设计与实现做到零侵入,兼容原有的设计与实现,充分体现出秒杀系统在设计上的高度可扩展性。

# 一、前言

目前,在秒杀系统的实现中,当秒杀商品信息变更后,基于Cola实现了JVM进程内的事件发布与接收,领域层会将事件发到到Cola,而应用层则监听并接收Cola中的事件,并更新分布式缓存中的秒杀商品信息。当秒杀系统由单体应用升级为微服务架构后,这种JVM进程内的事件发布与接收同样不能满足当前更新秒杀商品缓存的需求了。

# 二、本章诉求

重构秒杀商品异步事件后置处理器,将JVM进程内的事件发布与接收方式,升级为支持分布式的事件发布与接收方式,并且要对原有的设计与实现做到零侵入,兼容原有的设计与实现,充分体现出秒杀系统在设计上的高度可扩展性。

# 三、业务设计

本节,从流程设计和类结构两个方面来对零侵入重构秒杀商品异步事件后置处理器的设计进行简单的介绍。

# 3.1 流程设计

在秒杀系统中,零侵入重构秒杀商品异步事件后置处理器,并兼容原有设计与实现的流程如图53-1所示。


可以看到,添加秒杀商品和更新秒杀商品状态后,领域层会将事件封装成对应的事件模型发布出去,至于是发布到Cola,还是发布到RocketMQ,完全由配置决定,后续不需要修改代码即可实现。而应用层会监听并接收Cola或者RocketMQ中的事件,并更新商品列表缓存和商品详情缓存。

同时,不管是将事件发布到Cola还是发布到RocketMQ,统一实现了对应的事件模型,而不必单独为每种事件的发布方式单独设计事件模型,体现了事件模型在设计上的通用型和高度可扩展性。

# 查看完整文章

加入冰河技术 (opens new window)知识星球,解锁完整技术文章与完整代码