初识MQ(消息队列)

什么是MQ

  • MQ(message queue),字面意思一个存放消息的队列,遵循先进先出,那他有什么用,我们为什么要使用他呢?

为什么要使用MQ

  • 流量削峰
    举个例子,当车流很少量少的时候,没有人管控也不会出什么问题,但当车流量一大起来,不管控的话就容易出乱子,这个时候交警和红绿灯的作用就体现出来了,而MQ充当的角色正是交警或者红绿灯的角色,当有大量的请求的时候,先处理部分请求,让另一部分进入队列等待处理。
  • 应用解耦
    以电商应用为例,应用中有订单系统、库存系统、物流系统、支付系统。用户创建订单后,如果耦合调用库存系统、物流系统、支付系统,任何一个子系统出了故障,都会造成下单操作异常。当转变成基于消息队列的方式后,系统间调用的问题会减少很多,比如物流系统因为发生故障,需要几分钟来修复。在
    这几分钟的时间里,物流系统要处理的内存被缓存在消息队列中,用户的下单操作可以正常完成。当物流系统恢复后,继续处理订单信息即可,中单用户感受不到物流系统的故障,提升系统的可用性。
  • 异步处理
    有些服务间调用是异步的,例如 A 调用 B,B 需要花费很长时间执行,但是 A 需要知道 B 什么时候可以执行完,以前一般有两种方式,A 过一段时间去调用 B 的查询 api 查询。或者 A 提供一个 callback api,B 执行完之后调用 api 通知 A 服务。这两种方式都不是很优雅,使用消息总线,可以很方便解决这个问题,A 调用 B 服务后,只需要监听 B 处理完成的消息,当 B 处理完成后,会发送一条消息给 MQ,MQ 会将此消息转发给 A 服务。这样 A 服务既不用循环调用 B 的查询 api,也不用提供 callback api。同样 B 服务也不用做这些操作。A 服务还能及时的得到异步处理成功的消息。
    在这里插入图片描述

主流MQ对比

在这里插入图片描述

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 01:04:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 01:04:02       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 01:04:02       58 阅读
  4. Python语言-面向对象

    2024-07-17 01:04:02       69 阅读

热门阅读

  1. AI发展中的伦理挑战与应对策略

    2024-07-17 01:04:02       23 阅读
  2. 2024睿抗机器人开发者大赛CAIP编程赛题解(c++)

    2024-07-17 01:04:02       25 阅读
  3. ardupilot 系统时间见解

    2024-07-17 01:04:02       16 阅读
  4. EFFICIENT MODULATION FOR VISION NETWORKS

    2024-07-17 01:04:02       16 阅读
  5. 里氏替换原则

    2024-07-17 01:04:02       22 阅读
  6. 网络安全-网络安全及其防护措施2

    2024-07-17 01:04:02       22 阅读
  7. Git 的基本概念和使用方式

    2024-07-17 01:04:02       25 阅读
  8. 常见的SQL MODE及其解释

    2024-07-17 01:04:02       23 阅读
  9. [C++]类作用域

    2024-07-17 01:04:02       22 阅读