消息中间件——RabbitMQ(三)理解RabbitMQ核心概念和AMQP协议!

news2025/1/22 18:54:24

前言

本章学习,我们可以了解到以下知识点:

  • 互联网大厂为什么选择RabbitMQ?
  • RabbiMQ的高性能之道是如何做到的?
  • 什么是AMQP高级协议?
  • AMQP核心概念是什么?
  • RabbitMQ整体架构模型是什么样子的?
  • RabbitMQ消息是如何流转的?

1. 初识RabbitMQ

RabbitMQ 是一个开源的消息代理和队列服务器,用来通过普通协议在完全不同的应用之间共享数据(RabbitMQ能够实现跨语言跨平台的机制,),RabbitMQ是使用Erlang语言来编写的,并且RabbitMQ是基于AMQP协议的。

仅仅通过上面一句话,相信大家一定有很多疑惑和问题。

  • RabbitM成熟度到底怎么样?
  • 业界使用度怎么样?哪些大厂在使用?为什么?
  • 包括RabbitMQ到底都有哪些特点?
  • RabbitMQ为什么要用Erlang语言去编写?
  • 什么是AMQP协议?AMQP协议里面的具体的规范又是什么?

我相信大家跟我一样都会有这样的疑惑。那么我们一起来学习一RabbitMQ吧。

我们来了解第一个问题。

2. 互联网大厂为什么选择RabbitMQ?

业界使用度怎么样?哪些大厂在使用?为什么?都有哪些优点?
据我了解:滴滴、美团、去哪儿、头条…

这些互联网大厂都会采用RabbitMQ作为它底层的消息通信的一个基础组件。根本原因:

  1. 开源、性能优秀、稳定性保障
  2. 提供可靠性消息投递模式(confirm)、返回模式(return)
  3. 与SpringAMQP完美的整合、扩展性变得更强、API丰富
  4. 集群模式丰富、表达式配置、HA(高可用)模式、镜像队列模型
  5. 保证数据不丢失的前提下做到高可靠性、可用性

3. RabbiMQ的高性能之道是如何做到的?

原因就在于它使用了Erlang语言,Erlang语言最初在于交换机领域的架构模式,这样使得RabbitQ在Broker之间进行数据交互的性能是非常优秀的。

还有一点也是取决于作者,RabbitMQ开发的作者在开发RabbitMQ之间,先用Erlang语言做了一个简单的交换机,然后他惊奇的发现:Erlang的优点:Erlang有着和原生Socket一样好的延迟效果。
相信大家接触过Socket的朋友,对它的有怎样的性能有一定的了解。像我们耳熟能详的RPC通信框架。比如说:dubbo,它底层就是采用了Netty,Netty无非就是网络编程中的高性能之王,它无非就是一个Socket
基于这个特点呢,我们就有了一个充分的选择RabbitMQ的理由。其实我们选择RabbitMQ的时候,有一个主要的考量目标就是:当消息入到RabbtMQ节点上的时候,RabbitMQ的延迟以及响应。

4. 什么是AMQP高级消息队列协议?

  • AMQP全称:Advanced Message Queuing Protocol(高级消息队列协议)

AMQP定义:是具有现代特征的二进制协议。是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。

它就类似于Java中的JMS。是比较上层的规范,基于这个规范可以开发出各种各项的消息中间件。

模型分析

Pubilsher application:生产者应用 生产的消息,扔到Server端。

Server:指的就是RabbitMQ的节点

Virtual host:虚拟主机,比较上层的一个路由,类似于路由器这么一个概念。后续介绍

Exchange:交换机,生产者直接将消息投递到Exchange中。但是要经历3个过程 -》server->Virtual host->Exchange

先确定将消息发送到哪台服务器,那么就需要先去建立连接,设置一些地址等等。
第二层,投递到哪个Virtual host 需要定义。
第三层,投递到哪个Exchange也需要定义。

再看Consumer application 消费者的应用端,消费端只需要监听Message Queue,当队列中有消息的时候,就拿出来消费。因此在Exchange和Message Queue之间有绑定的关系存在,后续详细介绍。

5. AMQP核心概念是什么?

AMQP核心概念:

  • server: 又称Broker,接收客户端的链接,实现AMQP实体服务
  • Connection: 链接,应用程序与Broker的网络连接
  • Channel:网络信道,几乎所有的操作(数据的读、写)都在Channel中进行,Channel是进行消息读写的通道。客户端可建立多个Channel,每个Channel代表一个会话任务。
  • Message:消息,服务器和应用程序之间传送的数据,由Properties和Body组成。Properties可以对消息进行修饰,比如消息的优先级、延迟等高级特性;Body则就是消息体内容。
  • Virtual host:虚拟地址,用于进行逻辑隔离,最上层的消息路由。一个Virtual host 里面可以有若干个Exchange和Queue,同一个Virtual Host里面不能有相同名称的Exchange和Queue。一种逻辑概念,类似Redis的逻辑数据库。用来划分具体的服务。
  • Exchange:交换机,接收消息,根据路由键转发消息到绑定的队列
  • Binding:Exchange 和Queue之间的虚拟连接,Binding中可以包含routing key
  • Routing key:一个路由股则,虚拟机可用它来确定如何路由一个特定消息。
  • Queue:也称为message Queue,消息队列,保存消息并将它们转发给消费者。

以上核心概念先有一个大概的认知,以后会详细介绍。

6. RabbitMQ整体架构模型是什么样子的?


生产者把消息投递到Exchange,Exchange投递到Queue.
因此我们的生产者只需要关注把消息投递到指定的Exchange即可,我们的消费者只需要监听指定Queue即可。就是这么简单的机制。
通过图我们也能看到,生产者不需要关注投递到哪个队列,消费也不需要关注是从哪个Exchange上来的,这两块没有耦合的情况。主要是应为Exchange和Queue有一个绑定的关系。

7. RabbitMQ消息是如何流转的?

生产者publisher application 生产消息Message投递到Exchange上,Exchange绑定MessageQueue,可以绑定过多个MessageQueue,为什么三个队列只有其中一个队列收到了消息呢?主要是由于Exchange是有一个路由功能的。这个路由就是routing key,这个路由有两个非常关键的点,
第一个:你的消息是需要发送到哪个Exchange。
第二个:你发消息的时候需要带上routing key,然后通过Exchange 和 MessageQueue 建立一个绑定关系,通过路由key把消息路由到一个指定的队列上。然后我们的消费端直接监听队列就行了,就可以消费了。

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

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

相关文章

计算机基础知识——字,字节,进制,short,byte等

目录 进制位,字节,字Byte,ShortByteBuf有符号数和无符号数 进制 HEX,Hexadecimal ,十六进制。 DEC,Decimal ,十进制。 OCT,Octal ,八进制。 BIN,Binary &a…

语音识别技术在医疗行业中的应用案例

随着语音识别技术和计算机视觉技术的不断提高,现代医学正在进入全面数字化时代。 追求高质量的训练数据是人工智能产业的信条,得到更为精准的语音机器模型更离不开语音数据的不断供给。本文讲介绍: 什么是语音识别技术语音识别技术如何应用于医疗行业 …

SpringBoot:邮件发送

官网文档:39. Sending Email (spring.io)。 Sending Email Spring框架提供了JavaMailSender实例,用于发送邮件。 如果SpringBoot项目中包含了相关的启动器,那么就会自动装配一个Bean实例到项目中。 在SpringBoot项目中引入如下Email启动器&a…

小红书干货类笔记怎么写?建议收藏

小红书干货类笔记是指在小红书这个社交平台上,用户分享的各种实用、有价值的生活技巧、经验、心得等内容的笔记。这类笔记通常具有以下特点:内容详实、实用性强、独特见解、图文并茂。 比如:某个妆要怎么化、某种技能该怎么学、某个城市该怎…

前端环境变量释义import.meta.env.xxx

视频教程 彻底搞懂前端环境变量使用和原理,超清楚_哔哩哔哩_bilibili 添加命令行参数 --modexxxxx 新建.env.xxxx文件,其中.env文件会在所有环境下生效 以VITE_开头,字符串无需加双引号 使用import.meta.env.VITE_xxxxx进行调用

跨境电商客服系统:提升客户满意度与优化电商体验的关键

随着全球电子商务的快速发展,跨境电商已经成为新的商业发展趋势。在这个高度竞争的市场环境中,优质的客户服务成为区分优秀与平庸的关键因素。一个高效的跨境电商客服系统不仅可以提高客户满意度,还能帮助企业优化电商体验,进而提…

图解系列--密钥,随机数,应用技术

密钥 1.生成密钥 1.1.用随机数生成密钥 密码学用途的伪随机数生成器必须是专门针对密码学用途而设计的。 1.2.用口令生成密钥 一般都是将口令输入单向散列函数,然后将得到的散列值作为密钥使用。 在使用口令生成密钥时,为了防止字典攻击,需要…

flutter 极光集成华为厂商推送:Could not resolve com.huawei.agconnect:agcp:1.9.1.301

前提:已经按照极光官网配置好准备工作 问题截图: 主要一直通过vscode启动项目,下载华为包失败。通过和极光的开发沟通,在Android Studio中配置代理Ps:代理信息 检查链接成功,即可去下载插件包 然后正常执…

【技巧】PDF文件如何编辑?

日常办公中我们经常会用到PDF文件,PDF具备很好的兼容性、稳定性及安全性,但却不容易编辑,那PDF要如何编辑呢? 如果打开PDF文件就只是只读的性质,说明文件是在线打开,或者通过PDF阅读器打开的,这…

nodejs+vue线上生活超市购物商城系统w2c42

超市管理系统的开发流程包括对超市管理系统的需求分析,软件的设计建模以及编写程序实现系统所需功能这三个阶段。对超市管理系统的需求分析。在这个阶段,通过查阅书籍,走访商场搜集相关资料,了解经营者对软件功能的具体所需和建议…

人工智能和AR/VR:AI在AR和VR中扮演什么角色?行业应用有哪些?

增强现实技术和虚拟现实技术(AR/VR)发展前景广阔,备受各大企业关注。事实上,近四分之三的行业领导者表示,他们预计这些沉浸式技术将于未来五年内成为主流。高盛公司报告称,到2025年,AR/VR行业值…

Golang版本处理Skywalking Trace上报数据

Tips: 中间记录了解决问题的过程,如不感兴趣可直接跳至结尾 首先去es里查询skywalking trace的元数据 可以拿到一串base64加密后的data_binary(直接解密不能用,会有乱码,可参考https://github.com/apache/skywalking/issues/7423) 对data_b…

SkyWalking配置报警推送到企业微信

1、先在企业微信群里创建一个机器人,复制webhook的地址: 2、找到SkyWalking部署位置的alarm-settings.yml文件 编辑,在最后面加上此段配置 !!!一定格式要对,不然一直报警报不出来按照网上指导…

Leaflet结合Echarts实现迁徙图

效果图如下&#xff1a; <!DOCTYPE html> <html><head><title>Leaflet结合Echarts4实现迁徙图</title><meta charset"utf-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0">…

计算机系统的存储原理

文章目录 高速缓存存储设备的层次结构操作系统的两个基本功能参考 高速缓存 高速缓存至关重要。 helloworld 程序揭示了一个重要的问题&#xff1a;系统花费了大量的时间把信息从一个地方挪到另一个地方。 程序的机器指令最初是存放在磁盘上&#xff0c;当程序加载时&#xf…

c语言打印金字塔

输入行数n,打印n行的金字塔。如图&#xff1a; 先分析其规律。 打印n行&#xff0c;即外层循环n次。再分析每一层的规律&#xff0c;先具体化举例&#xff0c;举一个行数为5的金字塔。可以发现每一行前面的空格呈递减趋势&#xff0c;且与行数有关系&#xff1a;空格数行数-层…

STM32_3(GPIO)

GPIO简介 GPIO&#xff08;General Purpose Input Output&#xff09;通用输入输出口8种输入输出模式输出模式可控制端口输出高电平&#xff0c;驱动LED、蜂鸣器、模拟通信协议输出时许等输入模式可读取端口的高低电平或电压&#xff0c;用于读取按键输入、外接模块电平信号输…

AD7021C 触摸感应加灯光调节芯片IC 可用于触摸台灯、触摸玩具灯等

AD7021C触摸感应 IC 是为实现人体触摸界面而设计的集成电路。可替代机械式轻触按键&#xff0c;实现防水防尘、密封隔离、坚固美观的操作界面。使用该芯片可以实现 LED 灯光亮度调节&#xff0c;方案所需的外围电路简单&#xff0c;操作方便。确定好灵敏度选择电容&#xff…

【MybatisPlus】简介与使用

MyBatisPlus 1.简介 MyBatisPlus&#xff08;简称MP&#xff09;是一个MyBatis的增强工具&#xff0c;在MyBatis的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生 官网&#xff1a;https://baomidou.com/ MyBatis-Plus特性&#xff1a; 无侵入&#xff1a;只…

主机dbeaver访问gitlab容器中的pg

映射5432端口- 5431:5432或者从docker客户端查看 version: 3.6 services:web:image: gitlab/gitlab-ce:latestrestart: alwayshostname: localhostenvironment:GITLAB_OMNIBUS_CONFIG: |external_url http://localhost:8929gitlab_rails[gitlab_shell_ssh_port] 2224ports:- …