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

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

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处理并发】,可实现异步削峰,并解决重复插入问题。


  • 【monitor流量监控】:最大通过QPS为27,相比之前的172有大幅下降。



  • 【monitor指标监控】:系统CPU负载峰值13%,相比之前的50%有所下降。



  • 【单据列表】:数据正确,无重复数据。




小贴


本文涉及到的表单元数据及插件类,可点击下方链接,滑至文末,自行下载文章底部附件



其中:


元数据为前文所用的单据页面,导入即可使用;

kd.demo.sci.task.BizCodeThread为并发业务实现类,用于实现并发的具体业务;

kd.demo.sci.consumer.DemoConsumer为消费者实现类,用于消费者执行提交动作;

kd.demo.sci.task.LatchTest为模拟并发请求类,用于模拟并发场景;

kd.demo.sci.formplugin.MulThreadsEdit为表单插件类,用于响应工具栏点击。



以上就是本期的全部内容啦,下一篇我们将介绍如何用MQ解决分布式事务




#往期推荐#


 MQ入门:跑通第一个单机案例

#  MQ高阶:基于MQ的分布式事务解决方案

#  想要玩转MQ?那就必须懂MQ服务调用模型!

 必须要掌握的四种业务校验方案

#  一篇文章告诉你MQ的前世今生

 想要显示“附件下载次数”,看这里

#  手把手教你“分享附件”



更多精彩内容,“码”上了解!↓



附件.rar

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

在上一篇文章“MQ入门:跑通第一个单机案例”中,小编为大家讲解了如何自定义队列,并演示如何通过MQ实现消息通信。有了这层基础,小编本期...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息