MQ进阶:如何用MQ解决并发问题

在上一篇文章“MQ入门:跑通第一个单机案例”中,小编为大家讲解了如何自定义队列,并演示如何通过MQ实现消息通信。有了这层基础,小编本期为大家讲解进阶知识:如何用MQ解决并发问题。
1 需求背景
1.1 功能性需求
通信运营商新增了一批号卡,进行了一系列促销推广,并在某时间段内允许抢号。
抢号流程如下:通过SIM卡申请单,选择号卡,提交申请后,若抢号成功系统会发送消息通知用户“抢号成功”。
1.2 非功能性需求
1. 开抢时间段内,大量并发涌入,可能会增加服务器负载,造成服务器崩溃;
2. 若开抢时间内,大量用户抢同一号卡,则可能造成数据重复。
2 解决方案
1. 通过MQ异步削峰,减轻服务器负载;
2. 结合队列的数据结构性质,消除数据重复插入问题。
注:MQ的配置方法可参考上一篇文章:“MQ入门:跑通第一个单机案例”。
3 操作步骤
Step1 创建号卡申请单
首先,打开【表单设计器】界面,添加工具栏【直接并发提交】和【MQ处理并发】。
注:为了测试方便,单据编号取消必录和唯一性校验。

接着,增加号码的唯一性校验,并添加必录。具体操作如下图所示:



然后,注册表单插件类用于响应工具栏点击,类名称为:kd.demo.sci.formplugin.MulThreadsEdit,具体操作如下图所示:


Step2 模拟并发请求
通过类kd.demo.sci.task.LatchTest模拟并发请求,具体原理如下图所示:

Step3 模拟申请单业务
利用并发业务实现类kd.demo.sci.task.BizCodeThread和消费者实现类kd.demo.sci.consumer.DemoConsumer 分别模拟直接触发和MQ触发两种方法,业务内容为生成17299999999的号卡申请单。
4 实现效果
1. 点击【直接并发提交】,然后到monitor平台查看流量和CPU负载情况,在单据列表中查看数据。
【monitor流量监控】:最大通过QPS为172。

【monitor指标监控】:系统CPU负载峰值为50%。

【单据列表】:出现了4条重复数据。

2. 点击【MQ处
MQ进阶:如何用MQ解决并发问题
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



