消息队列---MQ介绍

news2024/11/17 23:36:41

文章目录

  • 前言
  • 一、MQ是什么?
      • 1.1基本概念
      • 1.2MQ的优势和劣势
        • 优势
          • 应用解耦
          • 异步提速
          • 削峰填谷
        • 劣势
  • 二、常见的MQ产品
  • 总结


前言

实习之MQ学习历程


一、MQ是什么?

1.1基本概念

MQ全称Message Queue(消息队列),是在消息的传输过程中保存消息的容器。多用于分布式系统之间进行通信(分布式系统:A、B两系统职责不一样,但是组合起来是一个大的系统,我们就称之为分布式系统)
分布式系统的通信问题:
有两种通信方式1.直接远程调用 2.发送者(生产者)发送给中间者(中间件),由中间者发送给接收者(消费者)。MQ属于第二种
在这里插入图片描述
在这里插入图片描述

1.2MQ的优势和劣势

优势

1.应用解耦
2.异步提速
3.削峰填谷

应用解耦

我们写代码都追求高内聚低耦合,因为耦合度降低了可维护性就提高了
在这里插入图片描述
由订单系统之间耦合三个子系统,会出现两个问题:
1.容错性低:列如库存系统产生异常导致库存系统挂掉,那么在用户下订单的时候整个链路走不通,可能导致订单系统出现问题
2. 可复用性低:例如要新增模块,那么只能在订单系统上修改

通过中间件解决直接通过远程调用的时带来得弊端
在这里插入图片描述

1.当用户发送订单给MQ,MQ就直接返回订单成功的响应 而后续的三个子系统只需要在MQ中把订单系统的数据拿出来,在自己的系统里去消费,从而把订单系统与三个子系统隔离起来了,子系统挂掉也没有关系,因为数据存在MQ中,只要子系统恢复以后,再从MQ中拿到数据执行,最终数据肯定正常,容错性提高
2.增加新模块 新模块也只用在MQ中拿数据 订单系统不需要改代码

异步提速

在这里插入图片描述

1.直接通过远程调用,会依次调用三个子系统,子系统没问题则存入数据库 耗时920ms

在这里插入图片描述

加入MQ中间件时,则只需要存入库操作与给MQ发送数据操作 就返回成功信息给前端,而三个子系统是否执行成功不影响,子系统再慢慢从mq拿数据执行 只需要消费25ms 提高了系统的吞吐量

削峰填谷

在这里插入图片描述

当请求远超A系统最大处理请求时,回导致A系统挂掉
在这里插入图片描述
当请求超过A系统最大请求时:因为用户对接的是MQ,然后A系统再慢慢从MQ拉取最大处理请求量处理请求 提高了系统的稳定性

劣势

1.系统可用性降低
系统引入的外部依赖越多,系统稳定性越差,一旦MQ宕机,就会对业务造成影响
2.系统复杂度提高
MQ的加入大大增加了系统的复杂度,以前系统间是同步的远程调用,现在是通过MQ进行异步调用,需要考虑消息有没有被重复消费,消息丢失,与顺序问题。
3.一致性问题
A系统处理完业务,通过MQ给子系统发消息数据,子系统有些处理成功有些失败,如何保证消息数据处理的一致性
在这里插入图片描述

二、常见的MQ产品

RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMQ等、Redis也可以直接充当消息队列
在这里插入图片描述

总结

使用MQ条件

1.生产者不需要从消费者处获取反馈,引入消息队列之前的直接调用,其接口的返回值应该为空,这才让明明下层的动作还没做,上层却当成动作做完了继续往后走,即所谓异步成为了可能
容许短暂的不一致性。
解耦、提速、削峰这些方面的收益超过加入MQ、管理MQ这些成本

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/82712.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构】堆排序 (超详细)

前言:      前几次讲了如何构建一个堆以及TopK算法,那么这次给大家分享一下堆排序的两种方法。 方法一 直接暴力解决,建一个小堆,把数组的数据依次push,随后每次Pop堆顶,放进数组里。不过该方法因为建堆有消耗&…

字体图标、平面转换、渐变

1、字体图标 字体图标 字体图标展示的是图标,本质是字体。处理简单的、颜色单一的图片 1.1、字体图标的优点: 灵活性:灵活地修改样式,例如:尺寸、颜色等轻量级:体积小、渲染快、降低服务器请求次数兼容性…

SQL ALTER TABLE 语句

📒博客主页: ​​开心档博客主页​​ 🎉欢迎关注🔎点赞👍收藏⭐留言📝 📌本文由开心档原创! 📆51CTO首发时间:🌴2022年12月12日🌴 ✉…

华硕编程竞赛11月JAVA专场 J题再见天空 题解

作者主页:Designer 小郑 作者简介:Java全栈软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发(Vue、SpringBoot和微信小程序)、系统定制、远程技术指导。CSDN学院、蓝桥云…

回归测试对比确认测试的区别

回归测试和确认测试是软件测试工作流程中的经常会做的两件事情,这两个环节也是代表软件测试的两个分类,那么他们之间的区别是什么?这篇文章咱们分析一下。回归测试与确认测试的区别?确认测试我们先说确认测试,它是软件…

表格解析 概览

表格解析发展至今,仍然是一项很年轻的研究领域,出现了大量解决方案,常用的技术包括:线检测、box检测、分割、多模态融合、GCN、img2seq。以下按我的理解梳理一下表格解析各个流派,从中了解这项任务背后所采用的技术。在…

28130-13-4,Val-Val-Val,H2N-VVV-OH

As trileucine, trivaline self-assembles into monolayers on highly ordered pyrolytic graphite (HOPG).三缬氨酸在高度有序的热解石墨(HOPG)上自组装成单层。 编号: 179127中文名称: 三肽Val-Val-Val英文名: Val-Val-ValCAS号: 28130-13-4单字母: H2N-VVV-OH三字母: H2N-Va…

算法:栈和队列的设计

一 用两个栈实现队列 1.1 题目描述 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ) 示例 1&a…

1 数据可视化简介

1.1 可视化释义 人眼是一个高带宽的巨量视觉信号输入并行处理器,最高带宽为每秒100MB,具有很强的模式识别能力,对可视符号的感知速度比对数字或文本快多个数量级,且大量的视觉信息的处理发生在潜意识阶段。其中的一个例子是视觉突…

SpringCloud2.0

一、网站架构演变过程 从传统架构(单体应用) 到 分布式架构(以项目进行拆分) 到 SOA架构(面向服务架构) 到 微服务架构 传统架构: 其实就是SSH或者SSM,属于单点应用,把整个业务模块都会在一个项目中进行开发,分为MVC架构&#…

pip install下载报网络错误、pip报错,以及module ‘serial‘ has no attribute ‘Serial‘报错

pip install下载报网络错误 下载pip install serial时报错如图:这是由于下载的pip官网是国外网站,下载速度会比较慢。 解决办法:从国内镜像去下载 ​ pip install serial -i https://pypi.tuna.tsinghua.edu.cn/simple或:sudo p…

虚拟化与云计算的区别

虚拟化和云计算之间的区别对于业务来说是至关重要和必要的。对于许多公司和专业人士来说,两者都是一样的。虽然云计算使用了虚拟化,但是虚拟化和云计算不是一回事。他们处理各种规模的 IT 挑战,并在对业务产生不同程度影响的不同范围内运作。…

工作很迷茫,是继续留在大城市打拼,还是回老家躺平呢?

你有没有面对这样的选择:是回到老家过一眼望到头的舒服简单的日子,还是趁年轻留在大城市拼一把,突破自己的舒适圈,挑战更多的可能性。你做了怎样的选择?你后悔吗? 什么样的人适合去大城市呢? 1、…

人脸表情识别 实战项目

一个不知名大学生,江湖人称菜狗 original author: jacky Li Email : 3435673055qq.com Time of completion:2022.12.12 Last edited: 2022.12.12 目录 ​编辑 人脸表情识别 实战项目 简介 环境部署 数据准备 项目说明 传统方法 深度方法 网络设…

LeetCode 剑指 Offer 二叉树的最近公共祖先 | 解题思路分享

剑指 Offer 618 - II. 二叉树的最近公共祖先 题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且…

基于Android的车位共享系统的设计

一、课题任务与目的 1. 课题背景 随着车辆越来越多,车位紧缺成为当前生活中最严重并且着急去解决的问题之一。本项目制作一款基于Android的车位共享系统用于缓解车位紧缺造成的压力。本次所开发的停车App是基于北京当前的交通状况为出发点的,让用…

Unity人工智能初学者指南

Unity人工智能初学者指南 使用 C# 在 Unity 游戏引擎中为游戏编写非玩家角色的实用指南 课程英文名:The Beginners Guide to Artificial Intelligence Unity 2022 此视频教程共13.5小时,中英双语字幕,画质清晰无水印,源码附件全…

Qt实现全局键盘事件监听器-Windows

Qt实现全局键盘事件监听器-Windows版🍇 文章目录Qt实现全局键盘事件监听器-Windows版🍇1、概述🍈2、实现效果🍉3、实现方式🍊4、关键代码🍋5、源代码🍌更多精彩内容👉个人内容分类汇…

分布式文件存储-FastDFS环境搭建

FastDFS简介 FastDFS是什么?我们这里可以看一下度娘的解释。FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了…

grid布局 笔记

这次给大家带来的是grid布局,之前听说过但没接触过,一起来学一下吧,提升一下css认知。 1、开启方式 给父级盒子开启grid布局 display: grid2、gap 间隙 所有盒子的行列间隙为10px gap: 10px行/列 colomn-gap: 20px;row-gap: 15px注意&#…