ActiveMQ消息队列的核心概念

news2024/10/2 20:31:06

文章目录

  • ActiveMQ消息队列的核心概念
    • 1.什么是MQ消息队列
    • 2.为什么要使用MQ消息队列
    • 3.MQ消息队列的应用场景
      • 3.1.异步处理
      • 3.2.应用解耦
      • 3.3.流量削锋
    • 4.常见的MQ消息队列产品对比

ActiveMQ消息队列的核心概念

1.什么是MQ消息队列

Message Queue消息队列简称MQ,消息队列从字面的含义来看就是消息的发生和接收保持排队顺序。

消息队列可以简单的理解为把要传输的数据放在队列中一一发送

**消息:**要传输的数据。

**队列:**先进先出的数据结构。

在消息队列中,数据放到消息队列叫做生产者,从消息队列中获取数据叫做消费者。

消息队列是一种异步的服务通信方式,是分布式系统中重要的组件,主要解决的问题包含:应用解耦、异步消息、流量削锋等问题,实现高可用、高性能、可伸缩和最终一致性的架构。

异步通信与同步通信的区别:

一个生活中的例子,当采用异步通信时,要找一个人,可以从知道这个人信息的另外一个人处拿到消息,迅速找到对应的人员。当采用同步通信时,要找到一个人,会从遇到的任何一个人开始询问,最后找到对应的人,效率低。

异步通信是面向字符的通信,同步通信时面向比特的通信。

使用较多的MQ消息队列产品有RocketMQ、RabbitMQ、Kafka、ActiveMQ等等。

2.为什么要使用MQ消息队列

举例生活中的一个例子来解释引入MQ前后的对比:

引入MQ之前:

我们日常生活中需要经常性的购物结账,当我们选好商品要结账时,发现收银员只有一个,但是顾客此时很多,一个顾客结账都需要5分钟左右,每个顾客都需要排队等候,浪费的时间很长,并且收银员的压力也会非常大,没有任何休息的时间,一直在处理交易。

引入MQ之后:

当引入了MQ消息队列后,收银员还是只有一个,但是此时多了一个自助收银机(MQ消息队列),顾客这个时候就可以在自助收音机这里排队付款,收银员的压力就大大降低了,收银员只在顾客付完款之后查看钱款是否正确即可,顾客就是生产者,收银员就是消费者,自助机的效率比收银员人工的高很多,再大大提高效率的同时也减去了收银员的压力。

例子中的顾客就好比是用户/服务的请求,自助机就是MQ消息队列,收银员就是应用程序。

程序没有接入MQ之前,服务之间需要频繁调用,影响服务端整体性能,接入MQ消息队列后,通过生产和消费机制,可以增大程序的并发量,提高系统的性能。

3.MQ消息队列的应用场景

MQ消息队列的应用场景分为异步处理、应用解耦、流量削锋等等。

3.1.异步处理

异步处理分为三种模式:串行方式、并行方式、异步处理。

以一个场景说明异步处理三种模式的不同之处,场景:用户注册需要执行三个业务逻辑,分布写入用户表、发送邮件以及注册短信的通知。

串行方式:

如下图所示,用户的提交了注册信息后,首先需要在数据库中写入注册信息,然后发送一个邮件通知用户,最后再发送一个短信通知,三个流程完成后,注册才算完成,这三个流程是串行的,也就是说当一个流量结束后,另一个流程才会开始,每一个流程的耗时为50毫秒,用户完成一个注册流程总共需要150毫秒。

串行方式指的就是按照先后顺序,一个一个的执行。

在这里插入图片描述

并行方式:

如下图所示,当架构调整为并行方式时,用户提交注册信息到数据库后,可以同时发生邮件通知和短信通知。

邮件和短信为并行方式,会同时处理当前流程,并行的方式可以大大提高处理的时间,此时用户完成注册仅需100毫秒。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YHJikvNQ-1687743883992)(.\ActiveMQ消息队列-笔记图片存放\image-20220305162925096.png)]

异步处理:

引入消息中间件之后才可以使用异步处理的方式。

如下图所示,当架构调整为异步处理时,用户提交注册信息到数据库的同时,也会将发送邮件和短信的请求写入到消息队列中,再通过异步的方式从消息队列中读取消息,进行发送邮件和短信的通知流程。

程序接入MQ消息队列后,用户将注册信息写入到数据库的时间也就是整个注册完成的时间,顶多增加一个写入消息队列的时间,写入消息队列是非常块的,接入消息队列后,程序的响应速度可以得到大幅度提升。

在这里插入图片描述

3.2.应用解耦

以一个场景说明程序接入MQ后应用解耦的场景,场景说明:用户下单后,订单系统调用库存系统完成库存的缩减。

在传统情况下,服务之间是直接调用的,如下图所示用户下单完成后,订单系统会去调用库存系统,完成商品的购买。

服务之间相互调用时没有问题的,但是存在一个弊端,如果库存系统宕机无法访问,那么订单系统下单后无法再库存中缩减,就会导致下单失败,订单系统和库存系统存在耦合性。

在这里插入图片描述

面对以上问题,如何解决应用系统之间的解耦呢,就可以引入MQ消息队列了。

如下图所示,当程序接入了MQ消息队列,用户在订单系统完成了下单,此时会将订单信息写入到消息队列,然后返回用户下单完成,然后由库存系统从消息队列中采用pull/push的方式,订阅消息队列中下单的消息,然后完成库存的缩减。

即使当库存系统故障了,用户下单完成后只要将消息能够写入消息队列,就可以保证用户下单的状态是完成的,消息队列中的数据可以持久化,当库存系统修复后可以直接从消息队列中进行订阅,完成整个流程操作,从而实现了应用的解耦。

在这里插入图片描述

3.3.流量削锋

流量削锋也是一种典型的应用场景,一般应用于高并发时刻,例如秒杀活动,高并发时一般会因为流量过大,导致应用的状态异常,从而影响线上用户的使用,通过MQ消息队列就可以解决此问题。

通过MQ消息队列可以控制请求的流量、缓解短时间内高并发压垮应用系统。

如下图所示,用户的请求首先被写入到消息队列中,由应用系统通过策略读取消息队列中的数据,然后进行处理,用户的请求相当于生产者,程序相当于消费者。

在这里插入图片描述

4.常见的MQ消息队列产品对比

MQ产品开发语言单机吞吐量时效性可用性功能特性
ActiveMQJAVA万级毫秒级高(支持主从架构)产品成熟,文档多,各种协议支持下高
RabbitMQErlang万级微秒级高(支持主从架构)基于Erlang开发,并发能力强,性能极高,延时很低,管理界面较丰富
RocketMQJAVA十万级毫秒级非常高(分布式架构)MQ功能比较完备,扩展性强
KafkaScala十万级毫秒级非常高(分布式)大数据领域应用广泛

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

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

相关文章

NXP i.MX 6ULL工业开发板规格书( ARM Cortex-A7,主频792MHz)

1 评估板简介 创龙科技TLIMX6U-EVM是一款基于NXP i.MX 6ULL的ARM Cortex-A7高性能低功耗处理器设计的评估板,由核心板和评估底板组成。核心板经过专业的PCB Layout和高低温测试验证,稳定可靠,可满足各种工业应用环境。 评估板接口资源丰富&…

AI通用大模型 —— Pathways,MoE, etc.

文章目录 Pathways现有AI缺憾Pathways Can DoMultiple TasksMultiple SensesSparse and Efficient Mixture of Experts(MoE)Neural Computation1991, Adaptive mixtures of local expertsICLR17, Outrageously Large Neural Networks: The Sparsely-Gate…

【已解决】ModuleNotFoundError: No module named ‘timm.models.layers.helpers‘

文章目录 错误信息原因解决方法专栏:神经网络精讲与实战AlexNetVGGNetGoogLeNetInception V2——V4ResNetDenseNet 错误信息 在使用timm库的时候出现了ModuleNotFoundError: No module named timm.models.layers.helpers’的错误,详情如下: …

Windows下安装ClickHouse图文教程

文章目录 1.安装WSL21.1启用适用于 Linux 的 Windows 子系统1.2启用Windows虚拟机功能1.3将WSL2设置为默认版本1.4下载Linux内核更新包1.5安装Linux子系统1.6设置账户和密码 2.安装Docker2.1下载与安装2.2设置镜像地址 3.安装Clickhouse3.1拉取镜像3.2启动clickhouse-server3.3…

Docker学习笔记7

启动一个运行httpd服务的容器: docker run -it --namec3 centos:latest /bin/bash 在容器中安装apache服务: yum install -y httpd 在这个过程中遇到一个问题: Error: Failed to download metadata for repo appstream: Cannot prepare …

关于PHP调用openAI chatGPT一些问题

我是直接使用gpt生成的curl代码区调用的 1:windows可能出现代理访问问题,报443端口问题 解决办法:开启代理后,需要到设置 确认这里打开状态 在curl请求里面加上对应的代码 curl_setopt($ch, CURLOPT_PROXY, "127.0.0.1&qu…

java spring cloud 企业工程项目管理系统源码-全面的工程项目管理

​ ​工程项目管理系统是指从事工程项目管理的企业(以下简称工程项目管理企业)受业主委托,按照合同约定,代表业主对工程项目的组织实施进行全过程或若干阶段的管理和服务。 如今建筑行业竞争激烈,内卷严重&#xff0c…

企业运维 | NFS、Samba服务在Docker容器环境中快速搭建部署实践

欢迎关注「全栈工程师修炼指南」公众号 设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习! 专注 企业运维实践、网络安全、系统运维、应用开发、物联网实战、全栈文章 等知识分享 “ 花开堪折直须折,莫待无花空折枝。 ” 作者主页&#xff1…

chatgpt赋能python:Python能自举吗?

Python能自举吗? Python是一门高级编程语言,由Guido van Rossum于1989年开发而来。Python被广泛用于Web开发、数据分析、人工智能等领域。因为Python语法简洁易懂,易于学习,许多人都称其为“入门语言”。 那么问题来了&#xff…

Spring Cloud——演进与应用的分布式系统开发利器

🌸作者简介:花想云,目前大二在读 ,C/C领域新星创作者、运维领域新星创作者、CSDN2023新星计划导师、CSDN内容合伙人、阿里云专家博主、华为云云享专家 🌸专栏推荐:C语言初阶系列 、C语言进阶系列 、C系列、…

Linux之CentOS 7.9部署Oracle 11g r2_p13390677_112040最终版简易安装实测验证(桌面模式)

前言: Linux之CentOS 7.9部署Oracle 11g r2最终版安装实测验证(桌面模式) 介于前段时间的Windows以及linux无桌面模式环境,之前的linux oracl源包因缺失会存在报错现象,这次主要以oracle 11gr2更新包来记录下部署方式&…

不挂脖、不入耳,南卡NANK-OE骨传开放式蓝牙耳机

蓝牙耳机几乎成为和手机相同的EDC设备,无论是在工作还是通勤过程,无论是娱乐还是线上办公,随身携带的蓝牙耳机都能提供更舒适、更便捷的听觉和通话体验。 目前主流的蓝牙耳机有头戴式、入耳式和骨传耳机三类,考虑到使用的便携性普…

JavaScript:一门强大的脚本语言,掌握它,开启前端开发之路

目录 一、JavaScript的发展历史背景 二、JavaSxript的组成 三、javascript的基本特点 四、javascript的特性 五、Javascript的使用方式 六、JavaScript与Java的区别 七、JavaScript与JScript的区别 一、JavaScript的发展历史背景 JavaScript的发展历史可以追溯到20世纪9…

4 带你学MATLAB图像处理关键技术(matlab代码)

学习目标:学习图像处理关键技术知识点 %% 获取RGB图像中具体的3个像素点的像素值 clear all; RGBimread(peppers.png); r[12 23 36]; c[35 40 60]; pimpixel(RGB,r,c) %% 获取任意一点的像素值 非常方便 clear all; close all; imshow(peppers.png); himpixelin…

生产模块-多计量单位防坑提示

文章目录 一、概述二、数据案例2.1、物料主数据:2.2、业务数据准备2.3、库存数据查看2.3.1库存数据:基本计量单位:KG库存2.3.2、辅助单位单位:EA库存2.3.3、出库操作:以562方式为例场景1:场景2:…

进阶课程1:jvm内存模型

目录 JVM内存结构转换总结一下 JVM整体结构线程栈 JVM栈内存结构栈帧操作数栈局部变量表 JVM堆内存结构堆内存非堆内存 JMM内容:讲解JMM的三大特性1.原子性2.可见性3.有序性 视频 JVM内存结构 JVM内部由线程栈和堆内存组成。 简单描述就是我们的原生类型的局部变量…

Redis学习基础篇

目录 初识Redis 认识NoSQL 关联的 非关联的​编辑 认识Redis 安装Redis 1.1.安装Redis依赖 1.2.上传安装包并解压 该目录以及默认配置到环境变量,因此可以在任意目录下运行这些命令。其中: 图形化工具下载:Releases lework/RedisDe…

什么是 CSR,SSR,SSG 渲染

在Web开发中,网页渲染是一个重要的过程,它关系到网页的渲染速度和SEO排名,下面列举三种常见的网页渲染方式。 一、什么是浏览器端渲染 (CSR) CSR(Client-Side Rendering)是指将网页的内容生成和渲染都放在客户端&…

什么是真正的骨传导耳机,介绍几款高性价比的骨传导耳机

随着越来越多的人喜欢户外运动,骨传导耳机也逐渐被人们所熟知。骨传导耳机是通过颅骨和内耳传递声音到听觉中枢,所以听感相对较好,不会对耳朵造成任何损伤,因此在户外运动中使用骨传导耳机是一个很好的选择。接下来我会给大家介绍…

弟弟高考考了673分姐姐哭了一小时,大V竟然说是悲哀

大家好!我是老洪。 6月23日起,全国各地高考分数线陆续公布中,老洪也一直在关注着。 时常看到有一些分享高考成绩的话题出现在热搜榜上。 比如老洪昨天提到的 女生高考712分查完分就睡觉了 复读女生涨61分坐地嚎啕大哭 女生发烧考618分挨个房间…