一、消息队列简介

介绍什么是消息队列,并介绍了消息队列的两种主要的应用场景场景。

什么是消息队列

消息队列,我们常简称为MQ(Message Queue),队列是一种先进先出的数据结构。那么消息队列就是在消息的传输过程中保存消息的容器。

主要的使用场景

削峰填谷

一般在秒杀或团队抢购活动中使用广泛。

系统压力方面:上游发起下单操作,下游完成秒杀业务逻辑(库存检查,库存冻结,余额检查,余额冻结,订单生成,余额扣减,库存扣减,生成流水,余额解冻,库存解冻)。上游下单业务简单,每秒发起了10000个请求;下游秒杀业务复杂,每秒只能处理2000个请求,很有可能上游不限速的下单,导致下游系统被压垮。

架构成本方面:在上游下单量剧增的情况下,下游应用仍然需要继续发挥作用,但是这样的突发流量并不常见,如果为以能处理这类峰值访问为标准来投入资源随时待命无疑是巨大的浪费。

如果通过消息队列的方式,将上游订单存储到消息队列中,下游消费端通过拉取的方式,并且拉去速度由消费端来控制,则就可以控制流量趋于平稳,这样就达到了削峰填谷的作用,又节省了成本。

调整架构如下图所示:

销峰填谷

秒杀处理流程如下所述:

  1. 用户发起海量秒杀请求到秒杀业务处理系统。
  2. 秒杀处理系统按照秒杀处理逻辑将满足秒杀条件的请求发送至消息队列。
  3. 下游的业务系统订阅消息队列的秒杀相关消息并进行处理,再将秒杀成功的消息发送到相应用户。
  4. 用户收到秒杀成功的通知。
异步解耦

以用户注册业务为例,对用户来说,注册功能实际只需要注册系统存储用户的账户信息后,该用户便可以登录,后续的注册短信和邮件不是即时需要关注的步骤。
对于注册系统而言,发送注册成功的短信和邮件通知并不一定要绑定在一起同步完成,所以实际当数据写入注册系统后,注册系统就可以把其他的操作放入对应的消息队列中然后马上给用户返回结果,由消息队列异步地进行这些操作,这样既缩短了用户注册的响应时间,又保证了邮件通知系统或短信通知系统出现问题后注册系统不会受到影响。
系统结构如下图所示:

异步解耦

数据流动如下所述:

  1. 用户在注册页面填写账号和密码并提交注册信息,这些注册信息首先会被写入注册系统成功。
  2. 注册信息写入注册系统成功后,再发送消息至消息队列。消息队列会马上返回响应给注册系统,注册完成。用户可立即登录。
  3. 下游的邮件和短信通知系统订阅消息队列的此类注册请求消息,即可向用户发送邮件和短信通知,完成所有的注册流程。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、 消息队列概述 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合、异步消息、流量削锋等问题。实现高性能...
    步积阅读 57,138评论 10 138
  • 以下是消息队列以下的大纲,本文主要介绍消息队列概述,消息队列应用场景和消息中间件示例(电商,日志系统)。 本次分享...
    文档随手记阅读 1,913评论 0 28
  • RocketMQ使用场景 RocketMQ使用场景场景介绍重要功能实例用户注册传统处理异步解耦分布式事务的数据一致...
    夜寒灯暖阅读 10,696评论 0 12
  • 为什么写这篇文章 现在的面试要求越来越高了,打开看了看几个 BOSS 招聘 Node.js 全栈开发的,其中都有一...
    伯纳乌的追风少年阅读 391评论 0 2
  • 【日更day108】文|张七 今天看了改革开放四十周年微视频——道路。不禁感概,祖国越来越好,我们的生活也越来越好...
    张七造梦阅读 1,444评论 0 5