# 第16节:使用MQ解耦抽奖发货流程
作者:小傅哥
博客:https://bugstack.cn (opens new window)
沉淀、分享、成长,让自己和他人都能有所收获!
- 分支:211030_xfg_AsyncDistributionAward (opens new window)
- 描述:使用MQ消息的特性,把用户抽奖到发货到流程进行解耦。这个过程中包括了消息的发送、库表中状态的更新、消息的接收消费、发奖状态的处理等。
# 零、优秀作业
- 在抽奖之后完成用mq发送和接受发奖信息 @Chin (opens new window)
- 使用MQ解耦抽奖发货流程 @Geroge Liu (opens new window)
- 使用MQ解耦抽奖发货的流程 @咖啡苦涩 (opens new window)
- 基于整个DDD架构,对应用层与接口层进行了数据对象的隔离,增加一个DTO对象,利用 MapStruct 来实现对象转换 @错否 (opens new window)
# 一、开发日志
- 在数据库表
user_strategy_export
添加字段mq_state
这个字段用于发送 MQ 成功更新库表状态,如果 MQ 消息发送失败则需要通过定时任务补偿 MQ 消息。PS:你可以使用本章节分支下的 sql 更新自己的库表。 - 启动 kafka 新增 topic:lottery_invoice 用于发货单消息,当抽奖完成后则发送一个发货单,再异步处理发货流程,这个部分就是MQ的解耦流程使用。
- 在
ActivityProcessImpl#doDrawProcess
活动抽奖流程编排中补全用户抽奖后,发送MQ触达异步奖品发送的流程。
# 二、创建主题(Topic)
在开发前我们先启动 Kafka 并新增加一个 MQ 的 Topic,命令语句如下:
启动zk:bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
启动kafka:bin/kafka-server-start.sh -daemon config/server.properties
创建topic:bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic lottery_invoice
1
2
3
2
3