# 《大营销平台系统设计实现》 - 营销服务 第19节:写入中奖记录和任务补偿发送MQ
作者:小傅哥
博客:https://bugstack.cn (opens new window)
沉淀、分享、成长,让自己和他人都能有所收获!😄
- 本章难度:★★★★☆
- 本章重点:使用 task表机制,在写入奖品记录时,一个事务下完成 task mq 消息的写入,并可以通过补偿的方式推送 MQ 消息。
- 课程视频:https://t.zsxq.com/19LcGz8jM (opens new window)
版权说明:©本项目与星球签约合作,受《中华人民共和国著作权法实施条例》 (opens new window) 版权法保护,禁止任何理由和任何方式公开(public)源码、资料、视频等内容到Github、Gitee等,违反可追究进一步的法律行动。
# 一、本章诉求
一整个抽奖过程先从活动账户额度充值、活动参与、抽奖执行【策略】,之后就是中奖记录写入和后续的发奖。那么本节要实现的就是这里的奖品记录写入和异步消息发送。
本节会用到 task 任务表,在写入奖品记录的时候,写入一条 task 消息发送任务,作为补偿使用。当 mq 发送失败的时候,则由任务扫描 task 消息进行发送。
# 二、业务流程
从用户中奖到发奖,通常来说我们会做异步解耦,因为一些奖品的方法并不是都是在抽奖系统,而是各种 RPC/HTTP 接口来发放,这些接口有些时候会有超时的问题,需要重试处理。所以需要数据库写入一条记录,之后记录一个状态。之后奖品真正发放完以后,在更新这个这个状态。
这样可以让用户快速指导自己已中奖即可,之后点击详情或者奖品列表进入中查看自己的中奖结果。
那么这里的写入记录和发送 MQ 消息,不能用事务解决,事务主要是数据库事务,但 MQ 消息不是数据库事务。所以需要写入一个 task 表,通过任务补偿的方式进行处理。
整体流程如下;
- 抽奖、抽奖策略,在前面已经实现完成,本节主要实现的是蓝色部分,写入中奖结果和任务,以及发送MQ消息。
- 这里我们会先简单的接收消费MQ,后续做消费奖品发放的其他处理。