九:day01_ 消息队列01

第一章 RabbitMQ 概念

 

1.1.1 消息队列

MQ全称Message Queue(消息队列),是在消息的传输过程中保存消息的容器多用于系统之间的异步通信。

1.1.2 消息

两台计算机间传送的数据单位。消息可以非常简单,例如只包含文本字符串;也可以更复杂,可能包含嵌入对象。

1.1.3 队列

数据结构中概念。在队列中,数据先进先出,后进后出。

 

1.2 节 MQ优势

1.2.1 应用解耦

在电商平台中,用户下订单需要调用订单系统,此时订单系统还需要调用库存系统、支付系统、物流系统完成业务。此时会产生两个问题:

  1. 如果库存系统出现故障,会造成整个订单系统崩溃。

  2. 如果需求修改,新增了一个X系统,此时必须修改订单系统的代码。

如果在系统中引入MQ,即订单系统将消息先发送到MQ中,MQ再转发到其他系统,则会解决以下问题:

  1. 由于订单系统只发消息给MQ,不直接对接其他系统,如果库存系统出现故障,不影响整个订单。

  2. 如果需求修改,新增了一个X系统,此时无需修改订单系统的代码,只需修改MQ将消息发送给X系统即可。

 

1.2.2 异步提速

 

1.2.3 削峰填谷

假设我们的系统每秒只能承载1000请求,如果请求瞬间增多到每秒5000,则会造成系统崩溃。此时引入mq即可解决该问题。

使用了MQ之后,限制消费消息的速度为1000,这样一来,高峰期产生的数据势必会被积压在MQ中,高峰就被“削”掉了,但是因为消息积压,在高峰期过后的一段时间内,消费消息的速度还是会维持在1000,直到消费完积压的消息,这就叫做“填谷”。

 

1.3 节 MQ劣势

  • 系统可用性降低

    系统引入的外部依赖越多,系统稳定性越差。一旦MQ宕机,就会对业务造成影响。

  • 系统复杂度提高

    MQ的加入大大增加了系统的复杂度,以前系统间是同步的远程调用,现在是通过MQ进行异步调用。

  • 一致性问题

    A系统处理完业务,通过MQ给B、C、D三个系统发消息数据,如果B系统、C系统处理成功,D系统处理失败,则会造成数据处理的不一致。

第二章 RabbitMQ工作原理

RabbitMQ是由Erlang语言编写的基于AMQP的MQ产品。

2.1 节 RabbitMQ工作过程

生产者(Publisher)将消息发布到交换机(Exchange),交换机根据规则将消息分发给交换机绑定的队列(Queue),队列再将消息投递 给订阅了此队列的消费者。

 

 

2.2 节 RabbitMQ 工作原理

  • Producer

    消息的生产者。也是一个向交换机发布消息的客户端应用程序。

  • Connection

    连接。生产者/消费者和RabbitMQ服务器之间建立的TCP连接。

  • Channel

    信道。是TCP里面的虚拟连接。例如:Connection相当于电缆, Channel相当于独立光纤束,一条TCP连接中可以创建多条信道,增加连接效率。无论是发布消息、接收消息、订阅队列都是 通过信道完成的。

  • Broker

    消息队列服务器实体。即RabbitMQ服务器

  • Virtual host

    虚拟主机。出于多租户和安全因素设计的,把AMQP的基本组件划分到一个虚拟的分组中。每个vhost本质上就是一个mini版的RabbitMQ服务器,拥有自己的队列、交换机、绑定和权限机制。当多个不同的用户使用同一个RabbitMQ服务器时,可以划分出多个虚拟主机。RabbitMQ默认的虚拟主机路径是 /

  • Exchange

    交换机。用来接收生产者发送的消息,并根据分发规则,将这些消息分发给服务器中的队列中。不同的交换机有不同的分发规则。

  • Queue

    消息队列。用来保存消息直到发送给消费者。它是消息的容器, 也是消息的终点。消息一直在队列里面,等待消费者链接到这个队列将其取走。

  • Binding

    消息队列和交换机之间的虚拟连接,绑定中包含路由规则,绑定信息保存到交换机的路由表中,作为消息的分发依据。

  • Consumer

    消息的消费者。表示一个从消息队列中取得消息的客户端应用程序。

RabbitMQ为什么使用信道而不直接使用TCP连接通信?

TCP连接的创建和销毁开销特别大。创建需要3次握手,销毁需要4次分手。高峰时每秒成千上万条TCP连接的创建会造成资源巨大的浪费。而且操作系统每秒处理TCP连接数也是有限制的, 会造成性能瓶颈。而如果一条线程使用一条信道,一条TCP链接可以容纳无限的信道,即使每秒成千上万的请求也不会成为性能的瓶颈。

第三章 RabbitMQ工作模式

 RabbitMQ共有六种工作模式:简单模式(Simple)、工作队列模式(Work Queue)、发布订阅模式(Publish/Subscribe)、路由模式(Routing)、通配符模式(Topics)、远程调用模式(RPC, 不常用)。

JMS:

由于MQ产品很多,操作方式各有不同,于是JAVA提供了一套规则 ——JMS,用于操作消息中间件。JMS即Java消息服务 (JavaMessage Service)应用程序接口,是一个Java平台中关于面向消息中间件的API。JMS是JavaEE规范中的一种,类比JDBC。很多MQ产品都实现了JMS规范,例如ActiveMQ。RabbitMQ官方并没有实现JMS规范,但是开源社区有JMS的实现包。

 

4.1 节 简单模式

4.1.1 简单模式介绍

特点:

  1. 一个生产者对应一个消费者,通过队列进行消息传递。

  2. 该模式使用direct交换机,direct交换机是RabbitMQ默认交换机。

4.2 节 工作队列模式

4.2.1 工作队列模式概念

 

与简单模式相比,工作队列模式(Work Queue)多了一些消费者,该模式也使用direct交换机,应用于处理消息较多的情况。特点如下:

  1. 一个队列对应多个消费者。

  2. 一条消息只会被一个消费者消费。

  3. 消息队列默认采用轮询的方式将消息平均发送给消费者

4.3 节 发布订阅模式(广播模式)

4.3.1 发布订阅模式概念

 

在开发过程中,有一些消息需要不同消费者进行不同的处理,如电商网站的同一条促销信息需要短信发送、邮件发送、站内信发送等。此时可以使用发布订阅模式(Publish/Subscribe)

特点:

  1. 生产者将消息发送给交换机,交换机将消息转发到绑定此交换机的每个队列中。

  2. 工作队列模式的交换机只能将消息发送给一个队列,发布订阅模式的交换机能将消息发送给多个队列。

  3. 发布订阅模式使用fanout交换机。

4.4 节 路由模式

4.4.1 路由模式概念

 

特点:

  1. 每个队列绑定路由关键字RoutingKey

  2. 生产者将带有RoutingKey的消息发送给交换机,交换机根据RoutingKey转发到指定队列。路由模式使用direct交换机。

4.5 节 通配符模式

4.5.1 通配符模式概念

 

 

通配符模式(Topic)是在路由模式的基础上,给队列绑定带通配符的路由关键字只要消息的RoutingKey能实现通配符匹配,就会将消息转发到该队列。通配符模式比路由模式更灵活,使用topic交换机。

通配符规则:

  1. 消息设置RoutingKey时,RoutingKey由多个单词构成,中间以 . 分割。

  2. 队列设置RoutingKey时, # 可以匹配任意多个单词, * 可以匹配任意一个单词。

第六章 总结

【1】说一下什么是MQ

答:MQ是消息队列容器,常见的MQ技术有RabbitMQ,RocketMQ解决微服务异步通信问题,场景如下:

  • 抢票、秒杀类场景:目的只有一个将并行场景转为串行场景来缓解并发压力。

  • 消息分发促销活动,需要将商品短链发送各个平台,需要时效不高,但数据量大,可以交给消息队列处理。

  • 数据同步:redis、es与mysql数据同步

  • 异步处理:在电商系统中,订单完成后,需要及时的通知子系统(进销存系统发货,用户服务积分,发送短信)进行下一步操作。为了保证订单系统的高性能,应该直接返回订单结果,之后让MQ通知子系统做其他非实时的业务操作。这样能保证核心业务的高效及时。

  • 离线处理:比如查询10年历史账单可以用MQ离线处理。

【2】说一下MQ的优势与劣势

答:优势:

  1. 异步提速 订单系统

  2. 应用解耦 订单系统

  3. 削峰填谷

劣势:

  1. 系统复杂度提高

  2. 编码难度提高

  3. 一致性和可用性降低

【3】RabbitMQ的工作原理

答:首先消息生产端通过TCP三次握手MQ服务器创建连接,由于连接耗时,链接一般不会释放,会在连接内部创建虚拟连接既信道,通过信道将消息发送给交换机,然后交换机根据routingKey路由到指定队列消费者与队列建立连接建立信道,然后监听指定队列,如有消息就消费消息。RabbitMQ服务器考虑到多租户和安全问题,服务内部可以设置多个虚拟主机,每个主机内部由上面的交换机,routingKey,队列组成。

【4】说一下RabbitMQ的交换机类型

答:交换机类型有:

  1. direct

  2. fanout

  3. topic

  4. headers(几乎不用)

简单类型、工作队列类型都是通过默认的定向交换机处理的。广播类型是由fanout交换机处理的,路由类型是由自定义的direct交换机处理的,通配符类型是由topic交换机处理的。

【5】RabbitMQ的工作模式有哪些?

答:

  1. 简单模式 1对1发送消息与接收

  2. 工作队列模式 1对多 发送消息,多端轮询接收消息

  3. 广播模式,1对多发送消息,多端共同消费消息

  4. 路由模式,1对多发送消息,按照路由名字转发指定队列并消费

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java web万能模板(附带防微博源码)

文章目录 java EE 项目万能模板套用创建一个java EE项目1.点击java ee2.点击finish3.一个Java ee项目创建完毕4.点击运行5.运行结果 万能模板连接数据库1.在pom.xml文件导入数据库连接所需要的依赖2.进行导入3. 导入以后刷新Maven4.找到 resources 文件。5.在resources的文件路…

​​社交媒体与新闻:Facebook在信息传播中的作用

社交媒体已经成为我们获取和传播新闻的主要渠道之一,而Facebook作为社交媒体的巨头,在信息传播中扮演着举足轻重的角色。本文将深入探讨社交媒体对新闻传播的影响,聚焦于Facebook在这一领域的独特作用,以及这种作用对我们的新闻体…

得物云原生容器技术探索与落地实践

一、前言 得物 App 作为互联网行业的后起之秀,在快速的业务发展过程中基础设施规模不断增长,继而对效率和成本的关注度也越来越高。我们在云原生技术上的推进历程如图所示,整体上节奏还是比较快的。 从 2021 年 8 月开始,我们以提…

Mr. Cappuccino的第69杯咖啡——Oracle之存储过程

Oracle之存储过程 准备数据PLSQL编程概念程序结构运行程序在DataGrip中运行DataGrip设置控制台输出打印内容 在sqlplus中运行sqlplus设置控制台输出打印内容 变量普通变量引用型变量记录型变量 流程控制条件分支循环 游标概念语法游标的属性创建与使用带参数的游标 存储过程概念…

【数据结构】——期末复习题题库(11)

🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL&#xff1a…

飞凌嵌入式这2款核心板已完成“矿鸿OS”适配,矿企伙伴看过来

近日,飞凌嵌入式FETA40i-C和FETMX6ULL-S两款核心板成功完成“矿鸿OS”的系统适配,嵌入式核心板与“矿鸿”操作系统的结合与应用,将进一步推动煤矿行业的数字化、智能化进程。 矿鸿OS(矿山鸿蒙系统)是华为和国家能源集团…

全自动网页制作系统流星全自动网页生成系统重构版输入网页信息即可制作

源码优点: 所有模板经过精心审核与修改,完美兼容小屏手机大屏手机,以及各种平板端、电脑端和360浏览器、谷歌浏览器、火狐浏览器等等各大浏览器显示。 免费制作 为用户使用方便考虑,全自动网页制作系统无需繁琐的注册与登入,直接…

Go后端开发 -- 面向对象特征:结构体 继承 多态 interface

Go后端开发 – 面向对象特征:结构体 && 继承 && 多态 && interface 文章目录 Go后端开发 -- 面向对象特征:结构体 && 继承 && 多态 && interface一、Go的结构体1.结构体的声明和定义2.结构体传参 二、将…

RXJS中Subject, BehaviorSubject, ReplaySubject, AsyncSubject的区别?

在RxJS(Reactive Extensions for JavaScript)中,Subject、BehaviorSubject、ReplaySubject和AsyncSubject都是Observable的变体,它们用于处理观察者模式中的不同场景。以下是它们之间的主要区别: 1、Subject: 是一种特…

AGI是否应该具备基础的常识模型

通用人工智能(AGI)是指能够理解或学习任何人类或其他动物能够做的智力任务的人工智能系统,它是人工智能领域的终极目标之一。 AGI 的研究范式是指在 AGI 领域中,研究者们所遵循的一些基本的理念、方法和目标。 AGI 是否应该存在基…

使用 Picocli 开发 Java 命令行,5 分钟上手

大家好,我是鱼皮,对不会前端的同学来说,开发 命令行工具 是一种不错的展示系统功能的方式。在 Java 中开发命令行工具也很简单,使用框架,几分钟就能学会啦~ Picocli 入门 Picocli 是 Java 中个人认为功能最完善、最简单…

Android系统开发之浅谈广播接收器回调

广播接器BroadcastReceiver 广播Intent和广播接收器BroadcastReceiver,是大家android开发用的特别多的二个控件。 那如何从系统角度看待广播和广播接收器呢? 对于静态注册BroadcastReceiver和动态注册的BroadcastReceiver是如何回调其onReceive方法呢…

Docker网络配置

网络相关 子网掩码 互联网是由许多小型网络构成的,每个网络上都有许多主机,这样便构成了一个有层次的结构。 IP 地址在设计时就考虑到地址分配的层次特点,将每个 IP地址都分割成网络号和主机号两部分,以便于IP 地址的寻址操作。…

从0到1:实验室设备借用小程序开发笔记

概论 实验室设备借用小程序,适合各大高校,科技园区,大型企业集团的实验室设备借用流程, 通过数字化的手段进一步提升相关单位设备保障水平,规范实验室和设备管理,用户通过手机小程序扫描设备的二维码,可以…

YOLOv5改进系列(26)——添加RFAConv注意力卷积(感受野注意力卷积运算)

【YOLOv5改进系列】前期回顾: YOLOv5改进系列(0)——重要性能指标与训练结果评价及分析 YOLOv5改进系列(1)——添加SE注意力机制 YOLOv5改进系列(2)——添加CBAM注意力机制 YOLOv5改进系列&…

Redis在Windows10中安装和配置

1.首先去下载Redis 这里不给出下载地址,自己可以用去搜索一下地址 下载 下载完成后解压到D盘redis下,本人用的是3.2.100 D:\Redis\Redis-x64-3.2.100 2.解压完成后需要设置环境变量,这里新建一个系统环境变量中path 中添加一个文件所…

如何用GPT 运行python?GPT4科研应用与AI绘图及论文高效写作

详情点击链接:如何用GPT 运行python?GPT4科研应用与AI绘图及论文高效写作 一OpenAI 1.最新大模型GPT-4 Turbo 2.最新发布的高级数据分析,AI画图,图像识别,文档API 3.GPT Store 4.从0到1创建自己的GPT应用 5. 模型…

计算机导论07-算法和数据结构

文章目录 算法基础算法及其特性算法的概念算法与程序算法表示 算法的描述自然语言流程图盒图(N-S图)伪代码程序设计语言 算法评价算法的衡量标准算法的规模时间复杂度空间复杂度 数据结构数据结构的概念数据的逻辑结构数据的存储结构数据的基本操作 常用…

6.3.4录制屏幕

6.3.4录制屏幕 除了可以进行声音录制外,Camtasia4还允许录制屏幕上的各种操作,并且在录制视频的同时还可以混入讲解,这在制作视频教程时很有用处。 1.在Camtasia Studio主程序中,单击【工具】|【Camtasia录像器】&am…

抖店商家对接带货主播建议,远离头部主播保平安,附沟通话术模板

我是王路飞。 抖店出单玩法中,商品卡属于靠天吃饭,有一定的风险,所以不建议新手选择。 我们自己包括学生做店,一直都是以达人模式为主的,主要是可控(风险可控,数据可控,流程可控&a…