RabbitMQ笔记-RabbitMQ基本术语

news2024/12/23 5:56:41

RabbitMQ基本术语

相关概念;

在这里插入图片描述

生产者(Producer):投递消息。消息:消息体(payload)+标签(label);生产者把消息交给rabbitmq,rabbitmq会根据标签把消息发给感兴趣的消费者。

  • 消息体:带业务逻辑的数据
  • 标签:表述这条消息,一个交换器的名称或者一个路由键。

消费者(Consumer):接收消息。连接rabbitmq服务器,订阅到队列上。消费消息体。消息路由过程中,消息的标签会丢弃,消息体存入队列

服务节点(Broker):一个broker可以看作一个rabbitmq服务节点或者rabbitmq服务实例。

队列(Queue):rabbitmq内部对象,用于存储消息。消息只能存在队列中。多个消费者可以订阅同一个队列,这时队列中的消息会被平均分摊给多个消费者处理(轮询),而不是每个消费者都收到所有的消息并处理。

交换器(Exchange):生产者将消息发送到Exchange,由交换器将消息路由到一个或多个队列中,如果路由不到,或许会返回给生产者,或许直接丢弃。

路由键(RoutingKey):生产者将消息发给交换器的时候,一般会指定一个RoutingKey,用来指定这个消息的路由规则,这个routingkey需要与交换机类型和绑定键联合使用才能最终生效。

绑定(Binding):交换器和队列通过绑定关联起来,在绑定的时候一般会指定一个绑定键,这样就知道如何正确的将消息路由到队列了

在这里插入图片描述

生产者将消息发送给交换器时,需要RoutingKey,当BindingKey和RoutingKey相匹配时,消息会被路由到对应的队列中。绑定多个队列到同一个交换器的时候,这些绑定允许使用相同的BindingKey。

例如

  • 交换器相当于投递包裹的邮箱
  • RoutingKey相当于填写在包裹上的地址
  • BindingKey相当于包裹的目的地
  • 当地址和实际想要的投递的地址匹配:正确投递到目的地,最后这个目的地的主人-队列可以保留这个包裹
  • 地址不匹配:不能正确投递,可能退回,也可能被丢弃

交换器类型

fanout

会把所有发送到该交换器的消息路由到所有与该交换器绑定的队列中

direct

会把消息路由到那些BindingKey和RoutingKey完全匹配的队列中。

topic

将消息路由到BindingKey和RoutingKey想匹配的队列中,但匹配规则有些不同

  • RoutingKey为“.”分割的字符串,分隔的每一段独立的字符串成为一个单词
  • BindingKey和RoutingKey一样也是“."分隔的字符串
  • BindingKey中可以存在了两种特殊字符串”*“和”#“,用于做模糊匹配

headers

根据发送的消息内容中的headers属性进行匹配

RabbitMQ运转流程

生产者发送消息

  • 生产者连接到rabbitmq broker,建立一个连接,开启一个信道
  • 生产者声明一个交换器,并设置相关属性(交换机类型,是否持久化)
  • 生产者声明一个队列并设置相关属性(是否排他,是否持久化等)
  • 生产者通过路由键将交换器和队列绑定起来
  • 生产者发送消息至rabbitmq broker,包含路由键,交换器等
  • 响应的交换器根据接收到的路由键查找相匹配的队列
  • 如果找到,则将从生产者发送过来的消息存入相应的队列中
  • 如果没有找到,根据生产者配置的属性选择丢弃还是回退给生产者
  • 关闭信道
  • 关闭连接

消费者消费

  • 消费者连接到rabbitmq broker ,建立一个连接,开启一个信道
  • 消费者向rabbitmq broker请求消息相应队列中的消息,可能会设置相应的回调函数以及做一些准备工作
  • 等待rabbitmq broker回应并投递相应队列中的消息,消费者接收消息
  • 消费者确认ack接收到的消息
  • rabbitmq从队列中删除相应已经被确认的消息
  • 关闭信道
  • 关闭连接

RabbitMQ 处理每条AMQP指令都是通过信道完成的,信道是建立在Connection上的虚拟连接,就是生产或者消费者与broker建立的tcp连接。

AMQP协议

RabbitMQ就是AMQP协议的Erlang实现,RabbitMQ是AMQP协议的erlang实现,AMQP的模型架构也是:生产者将消息发送给交换器,交换器和队列绑定,当生产者发送消息时所携带的RoutingKey与绑定时的BindingKey相匹配时,消息被存入相应队列中,消费者可以订阅相应的队列来获取消息。

AMQP协议

  • Module Layer:协议最高层,主要定义了一些供客户端调用的命令,客户端可以利用这些命令实现自己的业务逻辑,例如客户端可以使用Queue.Declare命令声明一个队列或者使用Basic.consume订阅消费一个队列中的消息
  • Session Layer:位于中间层,主要负责客户端的命令发送给服务器,再将服务端的应答返回给客户端,主要为客户端与服务器之间的通信提供可靠性同步机制和错误处理
  • Transport Layer:位于最底层,主要传输二进制数据流,提供帧的处理、信道复用、错误检测和数据表示等。

生产者流转过程

  • 客户端与broker建立连接,调用factory.newConnection,broker返回Connection.Start建立连接,
    • 涉及命令;Connection.Start/.Start-OK、Connection.Tune/.Tune-Ok、Connection.Open/.open-Ok
  • 客户准备开启信道,调用connection.createChannel
    • 命令:Channel.Open,Channel.Open-Ok
  • 客户端发送消息,调用channel.basicPublish
    • 命令:Basic.Publish

消费者流转过程

  • 客户端与broker建立连接,调用factory.newConnection,broker返回Connection.Start建立连接,
    • 涉及命令;Connection.Start/.Start-OK、Connection.Tune/.Tune-Ok、Connection.Open/.open-Ok
  • 客户准备开启信道,调用connection.createChannel
    • 命令:Channel.Open,Channel.Open-Ok
  • 消费之前调用channel.basicQos(int prefetchCount)方法设置消费者客户端最大能保持的未确认的消息数
    • 命令:Basic.Qos/.Qos-Ok
  • 真正消费前,消费者客户端需要向broker发送Basic.Consume命令将channel置为接收模式,之后broker回执basic.Consume-Ok告诉准备好了
  • 消费者接收到消息并正确消费后,向broker发送确认
    • 命令:Basic.Ack
  • 消费者停止消费,主动关闭连接
    • Chanel.Close/.Close-Ok和Connection.Close/.Close-Ok

参考:《RabbitMQ实战指南》

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

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

相关文章

深入理解回调函数qsort:从入门到模拟实现

🍁博客主页:江池俊的博客 💫收录专栏:C语言进阶之路 💡代码仓库:江池俊的代码仓库 🎪我的社区:GeekHub 🎉欢迎大家点赞👍评论📝收藏⭐ 文章目录 前…

layui框架学习(38:数据表格_自定义单元格样式)

layui中的数据表格模块table中的列参数中的基础参数templet支持通过基于laytpl语法的自定义列模板处理或展示单元格数据。本文首先学习layui示例中的表格样式设置示例(参考文献3),然后基于之前的传感器检测数据的表格示例,测试基于…

SHELL 基础 入门(三) Bash 快捷键 命令执行顺序,详解通配符

目录 Bash 常用快捷键 输入输出重定向 << 用法 输出重定向 命令执行顺序 ; 分号 && || 通配符 传统通配符 &#xff1f; * [ ] [ - ] [ ^ ] 常用字符 强调 &#xff1a; { } 生成序列 Bash 常用快捷键 Ctrl A 把光…

xargs 的用法 在1个文件夹中批量删除文件,这些删除的文件名是另一个文件夹中的文件名。

xargs 的用法 在1个文件夹中批量删除文件&#xff0c;这些删除的文件名是另一个文件夹中的文件名。 1、问题背景 应用场景 1、问题背景 应用场景 在二进制部署docker时&#xff0c;会把docker的所有可执行文件复制到/usr/bin下。 如果说复制过去后&#xff0c;想要反悔&#x…

使用proxman对iOS真机进行抓包

1 打开手机的safari 输入地址 http://proxy.man/ssl 2 下载证书代开设置页面&#xff0c;安装证书 设置信任证书 打开手机设置 &#xff0c;点击通用 点击关于本机、 点击证书信任设置 打开信任设置开关 4 设置手机代理 查看需要设置的代理地址 打开界面 在手机中按…

IDEA常用插件之私有注解Private Notes

文章目录 IDEA常用插件之私有注解Private Notes功能使用方法下载插件设置快捷键添加注释注释数据保存目录其他设置参数 更换电脑注释迁移同步 IDEA常用插件之私有注解Private Notes 功能 添加私有注解提交git后其他人看不到给源码添加注解 使用方法 下载插件 进入插件页面…

数据结构入门 — 顺序表详解

前言 数据结构入门 — 顺序表详解 博客主页链接&#xff1a;https://blog.csdn.net/m0_74014525 关注博主&#xff0c;后期持续更新系列文章 文章末尾有源码 *****感谢观看&#xff0c;希望对你有所帮助***** 文章目录 前言一、顺序表1. 顺序表是什么2. 优缺点 二、概念及结构…

Win解答 | 解决键盘中 字母+空格 导致的输入法弹窗导致的一系列问题

近三个月来&#xff0c;一直都有一个键盘组合键的问题影响我的电脑使用&#xff0c;不管是打字还是打游戏&#xff0c;都会出现按键盘的 字母空格 弹出一个特殊符号的候选框&#xff0c;如下图所示 图片中为 S空格 所出现的弹窗 一个看似方便&#xff0c;实则难受的功能 其实打…

【AndroidStudio】java.nio.charset.MalformedInputException: Input length = 1

java.nio.charset.MalformedInputException: Input length 1 可以参考这个文章处理下编码格式&#xff1a;https://blog.csdn.net/twotwo22222/article/details/124605029java.nio.charset.MalformedInputException: Input length 1是因为你的配置文件里面有中文或者是你的编…

APEX内置验证与授权管理

参考博客&#xff1a;&#xff08;真的很好的教程&#xff0c;感谢&#xff01;&#xff09; 09技术太卷我学APEX-定制页面及导航菜单权限_白龙马5217的博客-CSDN博客https://blog.csdn.net/html5builder/article/details/128816236?spm1001.2014.3001.5501 1 应用程序安全性…

Git 安装、配置并把项目托管到码云 Gitee

错误聚集篇&#xff1a; 由于我 git 碰见大量错误&#xff0c;所以集合了一下&#xff1a; git 把项目托管到 码云出现的错误集合_打不着的大喇叭的博客-CSDN博客https://blog.csdn.net/weixin_49931650/article/details/132460492 1、安装 git 1.1 安装步骤 1.1.1 下载对应…

Linux系统编程:进程信号的处理

目录 一. 用户态和内核态 1.1 用户态和内核态的概念 1.2 用户态和内核态之间的切换 二. 信号的捕捉和处理 2.1 捕捉信号的时机 2.2 多次向进程发送同一信号 2.3 sigaction 函数 三. 可重入函数和不可重入函数 四. volatile 关键字 五. SIGCHLD信号 5.1 SIGCHLD信号的…

在互联网+的背景下,企业如何创新客户服务?

随着互联网的发展&#xff0c;开始数字化转型的潮流&#xff0c;移动互联网平台为各个行业带来了发展的新方向。企业有了移动互联网的加持&#xff0c;为客户提供了更好的服务。当移动互联网平台能够为客户提供更好的用户体验时&#xff0c;相应地&#xff0c;客户也给企业带来…

OpenCV项目开发实战--基于Python/C++实现鼠标注释图像和轨迹栏来控制图像大小

鼠标指针是图形用户界面 (GUI) 中的关键组件。没有它,您就无法真正考虑与 GUI 进行交互。那么,让我们深入了解 OpenCV 中鼠标和轨迹栏的内置函数。我们将演示如何使用鼠标来注释图像,以及如何使用轨迹栏来控制图像的大小 我们将使用下图来演示 OpenCV 中鼠标指针和轨迹栏功能…

Arcgis colorRmap

arcgis中colorRmap对应的名称&#xff1a; 信息来源&#xff1a;https://developers.arcgis.com/documentation/common-data-types/raster-function-objects.htm 点击该网页&#xff0c;并直接搜索“rasterFunction”&#xff0c;直接索引到该位置。 在arcpy中使用方法&#…

Linux安装jdk、mysql、并部署Springboot项目

&#x1f61c;作 者&#xff1a;是江迪呀✒️本文关键词&#xff1a;Linux、环境安装、JDK安装、MySQL、MySQL安装☀️每日 一言&#xff1a;知行合一&#xff01; 文章目录 一、前言二、安装步骤2.1 安装JDK&#xff08;1&#xff09;创建文件夹&#xff08;便于后…

2828. 判别首字母缩略词

2828. 判别首字母缩略词 C代码1&#xff1a; bool isAcronym(char ** words, int wordsSize, char * s){if (wordsSize ! strlen(s)) {return false;} for (int i 0; i < wordsSize; i) { // 遍历所有&#xff0c;没有不满足的就是满足的if (words[i][0] ! s[i]) {return…

【C语言进阶(5)】指针笔试题(带图分析)

文章目录 笔试题 1笔试题 2笔试题 3笔试题 4笔试题 5笔试题 6笔试题7笔试题 8 分析下面代码的结果为何是这样 笔试题 1 1. 笔试代码 int main() {int a[5] { 1, 2, 3, 4, 5 };int* ptr (int*)(&a 1);printf("%d,%d\n", *(a 1), *(ptr - 1));return 0; }2.…

一文速学-让神经网络不再神秘,一天速学神经网络基础(一)

前言 思索了很久到底要不要出深度学习内容&#xff0c;毕竟在数学建模专栏里边的机器学习内容还有一大半算法没有更新&#xff0c;很多坑都没有填满&#xff0c;而且现在深度学习的文章和学习课程都十分的多&#xff0c;我考虑了很久决定还是得出神经网络系列文章&#xff0c;…

这才是教室巡课正确的打开方式,你做的太Low了!

随着教育领域不断演变和技术的不断进步&#xff0c;在线巡课系统正在逐渐引起人们的关注。通过实时观察教师的课堂教学&#xff0c;系统为教育管理者提供了窗口&#xff0c;使他们能够更深入地了解教学实践&#xff0c;从而更好地满足学生的学习需求。 在线巡课系统为教育管理者…