• springcloudalibaba架构(21):MQ的简介


    前言

    什么是MQ?
    有什么作用?

    什么是MQ?

    MQ(Message Queue) 是一种跨进程的通信机制,用于消息传递。
    在这里插入图片描述

    MQ 应用场景

    异步解耦

    最常见的常见是用户注册后,需要发送邮件通知,告知用户注册成功。传统的说法是,等待邮件发送成功后,再告知返回并告知用户。而实际上用户并不需要等到邮件发送这个过程,只要前面的处理完成后即可,邮件发送的过程可以异步实现,不需要即时获取。
    在这里插入图片描述

    所以实际上数据写入到注册系统后,注册系统就可以把其它操作交给消息队列MQ中然后立即返回给用户结果,由消息队列MQ异步地进行操作。
    在这里插入图片描述
    异步解耦是消息队列MQ的主要特点,主要的目的是减少请求响应时间和解耦。主要的使用场景就是将比较耗时而且不需要即时返回结果的操作作为消息放入消息队列。同时,由于使用了消息队列MQ,只需要保证消息格式不变,消息的发送方和接收方并不需要彼此联系,也不需要受对方的影响,即解耦合。

    流量消峰

    流量消峰也是消息队列MQ的常用场景,一般在秒杀或团队抢够活动中使用广泛。
    在秒杀或团队抢购活动中,由于用于请求量很大,导致流量暴增,秒杀的应用在处理如此大的访问流量后,下游的通知系统无法承载海量的调用量,甚至导致系统崩溃等问题而发生漏通知的情况。为解决这些问题,可在应用和下游通知之间加入消息队列MQ。
    在这里插入图片描述
    秒杀处理流程
    1.用户发起秒杀请求到业务系统
    2.秒杀系统按照秒杀逻辑将满足条件的请求发送到消息队列MQ
    3.下游的通知系统订阅消息队列MQ中的秒杀消息,再将秒杀成功的消息发送到响应的用户。
    4.用户收到秒杀成功的通知。

    常见的MQ产品

    • RocketMQ
      RocketMQ是阿里巴巴的MQ中间件,由JAVA语言开发,性能很好,能够支撑双十一的大流量,使用比较简单。
    • ActiveMQ
      ActiveMQ是历史悠久的Apache开源产品。在很多产品中都有应用,实现了JMS1.1规范,可以与spring-jms轻松融合,实现了多种协议,支持持久化到数据库,对队列数较多的情况支持不好。
    • Kafka
      +Kafka 是Apache下的一个子项目,是一个高性能跨语言分布式Publish/Subscribe消息队列系统,相对于ActiveMQ是一个非常轻量级的消息系统,除了性能非常好之外,还是一个工作良好的分布式系统。
    • RabbitMQ
      使用erlang语言开发,性能较好,适合企业级开发,但是不利于二次开发和维护。
  • 相关阅读:
    NestJS——基于Node.js 服务器端应用程序的开发框架
    算法:Java构建二叉树并递归实现二叉树的前序、中序、后序遍历
    移动端自动化-Appium元素定位
    [LeetCode] 最后一个单词的长度【58】
    网络安全无小事, 所有艾思运维人员, 在nginx中必须对thinkphp的目录做以下安全设置, 未尽目录请自行添加
    C/C++图的最小生成树和最短路径的实践
    虚幻4学习笔记(15)读档 和存档 的实现
    Vue-加载流程&&DIFF算法
    【MAPBOX基础功能】17、mapbox修改已上图图层间的显示层级
    meta标签汇总
  • 原文地址:https://blog.csdn.net/u011628753/article/details/126306663