RabbitMQ中的AMQP协议与核心组成介绍

news2024/12/26 14:53:59

前言

在RabbitMQ中为了传输数据,使用的是基于TCP/IP协议构造的AMQP协议。RabbitMQ的核心组成部分包括:Server、Connection、Channel、Message、ExChange、Virtual Host、Bingings、Routing key、Queue

AMQP协议

AMQP协议全称:Advanced Message Queuing Protocol(高级消息队列协议),是应用层协议的一个开发标准,为面向消息的中间件设计。它是基于TCP/IP协议构造的协议

AMQP协议生产者/消费者流转过程

生产者Producer

在这里插入图片描述

在这个过程中,我们需要先进行一个建立连接(既然是基于TCP/IP协议那肯定有三次握手和四次挥手这个过程),再在连接的基础上开辟通道,一个连接可以有许多个通道,我们的消息可以通过这些通道发送到我们的队列中去(当然这个过程还需要经过交换机的转发,这个我们后面会详细谈到。)

消费者Consumer

在这里插入图片描述

RabbitMQ核心组成

下图是RabbitMQ的核心组成
在这里插入图片描述
下面是对图中的一些名称的一些解释:

Server:又称Broker ,接受客户端的连接,实现AMQP实体服务。 安装rabbitmq-server
Connection:连接,应用程序与Broker的网络连接 TCP/IP/ 三次握手和四次挥手
Channel:网络信道,几乎所有的操作都在Channel中进行,Channel是进行消息读写的通道,客户端可以建立对各Channel,每个Channel代表一个会话任务。
Message :消息:服务与应用程序之间传送的数据,由Properties和body组成,Properties可是对消息进行修饰,比如消息的优先级,延迟等高级特性,Body则就是消息体的内容。
Virtual Host虚拟地址:用于进行逻辑隔离,最上层的消息路由,一个虚拟主机理由可以有若干个Exhange和Queueu,同一个虚拟主机里面不能有相同名字的Exchange。虚拟地址可以理解为数据库中的表,每个表中有不同的数据
Exchange:交换机,接受消息,根据路由键发送消息到绑定的队列。(不具备消息存储的能力)
Bindings:Exchange和Queue之间的虚拟连接,binding中可以保护多个routing key. Routing
Routing key:是一个路由规则,虚拟机可以用它来确定如何路由一个特定消息。 Queue:队列:也成为Message
Queue:消息队列,保存消息并将它们转发给消费者。

问题

基于以上的介绍,我们可以联想到一些问题:

问题一

问:AMQP与TCP/IP协议都是传输协议,为什么RabbitMQ使用的是前者不是后者?
答:RabbitMQ作为一款消息中间件,使用AMQP协议作为通信协议,有以下原因:
AMQP协议是一种分布式消息传递协议,可以保证消息的可靠传递和顺序。
AMQP提供的队列、路由、交换机等功能,能够更好地支持消息中间件的流程和功能。
AMQP具有多语言调用的API,可以跨平台进行应用开发。
因此,在RabbitMQ中使用AMQP协议,可以更好地支持分布式架构下的消息传递,提高系提高系统的可靠性和稳定性。

问题二

问:既然连接可以完成通信了,为什么需要管道Channel来完成沟通?
答:要知道TCP/IP的连接是短连接的,而AMQP是基于它构造的,那自然也避免不了是短连接的问题,一次消息发送就得重新把断开的连接重新连接上,这样效率就降下来了,那要维持这个连接,就需要用Channel管道维持端对端的连接。再有一个TCP连接可以实现多管道,做到了多路复用提高了效率。总得来说,一是Channel可以维持连接,省去了端对端的频繁连接的过程,二是一个连接可以建立多个Channel,实现了多路复用,提高了消息发送效率。

问题三

问:Virtual Host是什么?为什么需要它?
答:Virtual Host就是一个虚拟主机,主要作用就对不同的ExChange和Queue做隔离,可以理解为数据库的表,一个数据库中有多个表,每个表的作用不一样,而Virtual Host的作用就和这些表一样,左一个逻辑隔离,方便对不同的ExChange和Queue进行管理

感谢阅读,本文章仅作为笔记使用

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

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

相关文章

RK3588平台开发系列讲解(驱动基础篇)信号驱动 IO 实验

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、信号驱动 IO 简介二、实验程序2.1、应用程序2.2、驱动程序沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 信号驱动 IO 不需要应用程序查询设备的状态,一旦设备准备就绪,会触发 SIGIO 信号,进而调用注…

论文中文翻译——kAFL Hardware-Assisted Feedback Fuzzing for OS Kernels

本论文相关内容 论文下载地址——26th USENIX Security Symposium论文中文翻译——kAFL Hardware-Assisted Feedback Fuzzing for OS Kernels 文章目录 本论文相关内容前言kAFL:操作系统内核的硬件辅助反馈Fuzzing作者信息论文来源主办方信息摘要1 引言2 技术背景2…

系统U盘制作随记

随身系统U盘制作 最近花了好多时间,废了好多U盘才把这东西搞明白了。 主要是自己的笔记本问题比较多,用实验室的Hp机一下就弄好了。 用这篇博客总结一下自己,然后附上详细的流程以免大家踩坑。 Windows to Go 这个比较容易上手 1. 准备…

EIoT能源物联网在工厂智能照明系统改造项目的应用 安科瑞 许敏

【摘要】:随着物联网技术的发展,许多场所针对照明合理应用物联网照明系统,照明作为工厂的重要能耗之一,工厂的照明智能化控制,如何优化控制、提高能源的利用率,达到节约能源的目的。将互联网的技术应用到工…

MySQ基本操作详解

MySQL的基本操作 首先sql操作中的关键字的是大小写不敏感的,create 和CREATE是一样的。 1.库操作 1. 1查看数据库 show databases;show 和databases 之间有一个或者多个空格注意是databases而不是database结尾分号是英文形式,分号在SQL中是表示一行执…

第三节 循环结构

文章目录 1. while循环1.1 什么是循环?1.2 while 循环1.2.1 语法结构1.2.2 循环中的异类 1.3 while循环使用案例1.3.1 求1~100之间的和1.3.2 求1~100之间偶数之和1.3.3 循环中的"标志变量" 1.4 嵌套循环使用1.4.1 嵌套循环语法结构1.4.2 嵌套练习 1.5 知识扩展 --最…

Mobx+Mobx-React快速上手 简单可扩展的状态管理解决方案

Mobx是Redux之后的一个状态管理库,基于响应式状态管理,整体是一个观察者模式的架构,存储state的store是被观察者,使用store的组件是观察者。Mobx可以有多个store对象,store使用的state也是可以变对象,这些都…

LNMP架构搭建实操(终有弱水替沧海,再无相思寄巫山”大概意思就是,你会遇到很多人,但不会有人像我那么爱你了。)

文章目录 一、安装Nginx服务1.安装依赖包2.创建Nginx运行用户3.编译安装Nginx源码包4.优化路径便于使用5、添加 Nginx 系统服务 二、安装Mysql服务1.安装Mysql环境依赖包2.创建Mysql运行用户3.编译安装4.修改mysql配置文件5.更改mysql安装目录和配置文件的属主属组6.设置路径环…

【Leetcode】77 组合 | 掌握回溯的力量吧!

【1】限制:数字只能够使用一次。 77 组合 栗子,从 { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 } \{1,2,3,4,5,6,7,8,9,10\} {1,2,3,4,5,6,7,8,9,10}中选择4个数: 选择1,从 { 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 } \{2,3,4,5,6…

电力需求侧管理和电力负荷管理数字化解决方案 安科瑞 许敏

摘要:近年来全国用电负荷特别是居民用电负荷的快速增长,全国范围内夏季、冬季用电负荷“双峰”特征日益突出,恶劣气候现象多发增加了电力安全供应的压力。具有随机性、波动性、间歇性特征的可再生能源大规模接入电网对电力系统的稳定性带来新…

视频观看行为高级分析(大数据分析)

今天介绍一下我们的视频观看行为高级分析功能。 一、观看行为分析 观看行为分析,基于Polyv大数据分析,能够以秒为粒度展示观众如何观看您的视频。 视频观看热力图是单次观看行为的图形化表示,Polyv云点播视频的每一次播放,都会产…

基于jupyter的多分类问题练习

文章目录 练习3:多分类问题介绍1 多分类1.1 数据集1.2 数据可视化1.3 逻辑回归的向量化1.3.1 代价函数的向量化1.3.2 梯度的向量化1.3.3 正则化逻辑回归的向量化 1.4 多分类-分类器 1.5 使用分类器进行预测 总结 练习3:多分类问题 介绍 在本练习中&…

Leetcode周赛348

第一题:最小化字符串长度 思路分析 通过分析我们可以发现,只要存在重复的元素就可以继续进行操作所以这里本质上是一道去重的题目去重我们可以使用双指针算法和Set;我们选择使用Set进行去重 class Solution {public int minimizedStringLengt…

Vue2 vue-cli

安装与卸载vue脚手架 npm i -g vue/cli vue --version 查看vue脚手架版本 vue -V 查看vue脚手架版本 npm uninstall -g vue/cli 卸载 创建项目 vue create 项目名 选择项目 (Default 为快速创建项目) 选择最后一下,回车 上下键选择 Rou…

shell脚本:函数

shell脚本-函数 一、函数:1.定义:2.作用:3.格式: 二、函数传参:1.定义:2.函数变量:3.递归:4.函数库: 一、函数: 1.定义: (1&#xf…

Internal error. Please report to https://jb.gg/ide/critical-startup-errors

大佬的解决方式:PyCharm 2023 启动报错的处理 部分同学,发现在安装 PyCharm 2023.1.2 以及 PyCharm 2023.2 的抢先体验版之后,运行的时候愣是直接弹出了类似上面的报错。 反正,别慌! 是的,他们有 bug。 …

呈现视觉妙技:使用Python将MP4视频转化为迷人的GIF图像

前言 GIF图片对于我来说是一个很好的展示方式,GIF 图片能够展示动态的图像效果,对于展示计算机视觉算法或结果非常有用。例如,我可以使用 GIF 图片来展示运动跟踪、姿势识别、图像分割、目标检测等任务的结果,以更生动和直观的方…

基于midiepipe、opencv的家庭健身智能推荐与姿态监测系统

目录 0. 前言1. opencv简介2. midiepipe简介3. yolo5简介4. 虚拟环境搭建以及工程目录设置5. 部分代码展示6. 项目成果7. 说明 0. 前言 本项目由我与gay友以及三位21级学弟历时一年共同合作完成 为了给运动者提供一种更加科学、更加精准的个性化运动方案,设计实现…

【SpinalHDL快速入门】6.2、SpinalHDL语法之When/Switch/Mux

文章目录 1.1、When1.2、Switch1.2.1、实例1.2.2、附加选项 1.3、本地声明1.4、Mux1.5、位选择1.5.1、实例 1.1、When 与VHDL和Verilog一样,当满足指定条件时可以对信号进行有条件的赋值: when(cond1) {// Execute when cond1 is true }.elsewhen(cond…

直播问答功能(互动功能接收端JS-SDK)

功能概述 本模块主要用于展示问答模块。 初始化及销毁 在实例化该模块并进行使用之前&#xff0c;需要对SDK进行初始化配置&#xff0c;详细见参考文档。 在线文件引入方式 // script 标签引入&#xff0c;根据版本号引入JS版本。 <script src"https://websdk.vi…