当前位置: 首页 > news >正文

RabbitMQ笔记-RabbitMQ基本术语

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实战指南》

相关文章:

RabbitMQ笔记-RabbitMQ基本术语

RabbitMQ基本术语 相关概念; 生产者(Producer):投递消息。消息:消息体(payload)标签(label);生产者把消息交给rabbitmq,rabbitmq会根据标签把消息发给感兴趣…...

Git向远程仓库与推送以及拉取远程仓库

理解分布式版本控制系统 1.中央服务器 我们⽬前所说的所有内容(⼯作区,暂存区,版本库等等),都是在本地也就是在你的笔记本或者计算机上。⽽我们的 Git 其实是分布式版本控制系统!什么意思呢? 那我们多人…...

PostgreSQL+SSL链路测试

SSL一个各种证书在此就不详细介绍了,PostgreSQL要支持SSL的前提需要打开openssl选项,包括客户端和服务器端。 测试过程。 1. 生成私钥 root用户: mkdir -p /opt/ssl/private mkdir -p /opt/ssl/share/ca-certificateschmod 755 -R /opt/ss…...

服务器(容器)开发指南——code-server

文章目录 code-server简介code-server的安装与使用code-server的安装code-server的启动code-server的简单启动指定配置启动code-server code-server环境变量配置 code-server端口转发自动端口转发手动添加转发端口 nginx反向代理code-servercode-server打包开发版镜像 GitHub官…...

C++贪吃蛇(控制台版)

C自学精简实践教程 目录(必读) 目录 主要考察 需求 输入文件 运行效果 实现思路 枚举类型 enum class 启动代码 输入文件data.txt 的内容 参考答案 学生实现的效果 主要考察 模块划分 文本文件读取 UI与业务分离 控制台交互 数据抽象 需求 用户输入字母表示方…...

Java之字符串实践

功能概述 字符串是Java编程中常用的数据类型,本文对String部分常见功能做了对应实践以及分析。 功能实践 场景1:字符串比较 用例代码 Test public void test_string_compare() {String s1 "abc";String s2 s1;String s5 "abc&quo…...

BM20 数组中的逆序对

描述 解题思路:归并排序 分治:分治即“分而治之”,“分”指的是将一个大而复杂的问题划分成多个性质相同但是规模更小的子问题,子问题继续按照这样划分,直到问题可以被轻易解决;“治”指的是将子问题单独进…...

高德猎鹰轨迹查询相关接口

高德猎鹰轨迹官网:服务管理-API文档-开发指南-猎鹰轨迹服务 | 高德地图API 轨迹查询 httpclient的post // post方法请求 创建轨迹 private static void createTrace() {String key "高德注册的key";String sid "服务id"; // 服务idString…...

整理总结新手开始抖音小店经营:常见问题及解决办法

抖音小店作为一种新兴的电商模式,在短时间内获得了广泛的关注和使用。然而,对于新手来说,抖音小店经营可能会遇到一些问题。下面是四川不若与众总结的一些常见的问题以及相应的解决办法。 问题一:产品选择困难 对于新手来说&#…...

4-1-netty

非阻塞io 服务端就一个线程,可以处理无数个连接 收到所有的连接都放到集合channelList里面 selector是有事件集合的 对server来说优先关注连接事件 遍历连接事件...

hive 动态分区-动态分区数量太多也会导致效率下降只设置非严格模式也能执行动态分区

hive 动态分区-动态分区数量太多也会导致效率下降&只设置非严格模式也能执行动态分区 结论 在非严格模式下不开启动态分区的功能的参数(配置如下),同样也能进行动态分区数据写入,目测原因是不严格检查SQL中是否指定分区或者…...

java八股文面试[JVM]——JVM调优

知识来源: 【2023年面试】JVM性能调优实战_哔哩哔哩_bilibili...

FairyGUI-Unity 异形屏适配

本文中会修改到FairyGUI源代码,涉及两个文件Stage和StageCamera,需要对Unity的屏幕类了解。 在网上查找有很多的异形屏适配操作,但对于FairyGUI相关的描述操作很少,这里我贴出一下自己在实际应用中的异形屏UI适配操作。 原理 获…...

Oracle监听器启动出错:本地计算机上的OracleOraDb11g_home1TNSListener服务启动后又停止了解决方案

在启动oracle的服务OracleOraDb11g_home1TNSListener时,提示服务启动后又停止了。 解决方法: 修改oracle安装目录下的两个配置文件: 以上两个文件,对应的HOST的值,都改为127.0.0.1 然后再启动服务,启动成…...

Spring复习:(58)<context:annotation-config/>的作用

引入如下的BeanPostProcessor • ConfigurationClassPostProcessor • AutowiredAnnotationBeanPostProcessor • CommonAnnotationBeanPostProcessor • PersistenceAnnotationBeanPostProcessor • EventListenerMethodProcessor如果xml文件配置了bean中使用了Autowired注解…...

“东方杯”英特尔oneAPI黑客松大赛—参赛经验分享

目录 前言1、大赛要求2、oneMKL介绍3、准备 oneMKL基本使用1、下载:2、安装:3、初始化oneMKL环境:4、编译代码5、运行 所需的头文件使用oneMKL工具生成随机数使用fftw3计算FFT调用oneMKL API加速计算FFT对比两种方法的准确性输出结果结束语 前…...

win10家庭版远程桌面补丁_rdp wrapper

RDP Wrapper Library 就是可以帮你在 Windows 7、Windows 8、Windows 10 家庭版中打开远程桌面的工具。 1、把电脑上打开的安全软件与杀毒软件都关掉,因为这个远程桌面补丁会修改系统文件,所以安全软件可能会拦截。 2、下载RDP Wrapper Library补丁压缩…...

【C++设计模式】开放-封闭原则

2023年8月27日,周日下午 我觉得我的这篇博客还是写得很不错的,哈哈哈。 目录 概述举例说明用开放-封闭原则重构 概述 开放-封闭原则(Open-Closed Principle,OCP)是面向对象设计中的一个重要原则,也是许多…...

vue+file-saver+xlsx+htmlToPdf+jspdf实现本地导出PDF和Excel

页面效果如下(echarts图表按需添加,以下代码中没有) 1、安装插件 npm install xlsx --save npm install file-saver --save npm install html2canvas --save npm install jspdf --save2、main.js引入html2canvas import htmlToPdf from …...

axios 进阶

axios 进阶 接口传参方式 使用 xhr 原生技术或者是 axios 时,它的 post 传参方式是键值对的形式 keyvalue。但是在实际开发中一般是使用对象的形式定义数据,方便读取和赋值。所以当我们需要发起请求时可以通过 qs 这一款插件将对象转成键值对形式&…...

Redis限流实践:实现用户消息推送每天最多通知2次的功能

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师…...

uniapp 存储base64资源为http链接图片

1. 新建一个base64.js 文件 const fsm wx.getFileSystemManager(); // base64data base64资源 // name 文件名 function base64src(base64data, name, cb) {const time new Date().getTime();const filePath ${wx.env.USER_DATA_PATH}/${name}.${time}.png;const buffer …...

列表类控件虚拟化

WPF列表控件提供的最重要的功能是UI虚拟化(WPF编程宝典说的)。所有的WPF列表控件(所有继承自ItemsControl的控件,包括ListBox、CombBox、ListView、TreeView、DataGrid)都支持UI虚拟化。 UI虚拟化的支持实际上没有被构…...

c# 多线程Task.Run 取消正在执行的多线程

c# 异步处理,上次处理没有完成,下次有紧接着处理多线程出错 在 C# 中进行异步处理时,确保处理上一个任务完成后再处理下一个任务是很重要的,特别是在涉及多线程的情况下。如果上一个任务尚未完成,而下一个任务又开始执…...

sql server 如何设置主键

开始之前 限制和局限 一个表只能包含一个 PRIMARY KEY 约束。 在 PRIMARY KEY 约束中定义的所有列都必须定义为 NOT NULL。 如果没有指定为 Null 性,则加入 PRIMARY KEY 约束的所有列的为 Null 性都将设置为 NOT NULL。 创建主键会自动创建相应的唯一群集索引、…...

【LeetCode-中等题】19. 删除链表的倒数第 N 个结点

文章目录 题目方法一:节点加入集合找索引方法二:直接计算长度,然后找出要删除的节点的前一个节点方法三:栈方法四:前后双指针 题目 这题的关键在与两个点 一定要设置一个哑结点,防止删除第一个元素时,导致空…...

Matlab图像处理-减法运算

减法运算 图像减法也称为差分方法,是一种常用于检测图像变化及运动物体的图像处理方法。常用来检测一系列相同场景图像的差异,其主要的应用在于检测同一场景下两幅图像之间的变化或是混合图像的分离。 差影法 将同一景物在不同时问拍摄的图像或同一景…...

stm32之11.USART串口通信

可以添加上拉电阻&#xff0c;但会增加功耗&#xff0c;传输距离变长 要添加库函数USART 官方参考文档说明书位置 ALT&#xff0b;左键可实现整体删除&#xff08;如下图&#xff09; 输出模式第三种模式AF ---------------------- 源码 远程控制pc端 #include <stm32f4x…...

Python实现T检验

今天来分享一下T检验的python实现方法。 01 先来上一波概念。 1.单样本t检验&#xff0c;又称单样本均数t检验&#xff0c;适用于来自正态分布的某个样本均数与已知总体均数的比较&#xff0c;其比较目的是检验样本均数所代表的总体均数是否与已知总体均数有差别。已知总体均数…...

校招算法题实在不会做,有没有关系?

文章目录 前言一、校招二、时间复杂度1、单层循环2、双层循环 三、空间复杂度四、数据结构五、校招算法题实在不会做&#xff0c;有没有关系&#xff1f;六、英雄算法集训 前言 英雄算法联盟八月集训 已经接近尾声&#xff0c;九月算法集训将于 09月01日 正式开始&#xff0c;目…...

苹果手机如何做微电影网站/游戏优化大师下载安装

vxe-table官网...

住房和城乡建设部网站事故快报/百度搜索引擎属于什么引擎

http://videolectures.net/Top/Computer_Science/Machine_Learning/##tvtt转载于:https://www.cnblogs.com/stoneresearch/archive/2010/08/22/4336500.html...

微信支付服务商平台/seo公司优化排名

关系型数据库是什么? Mysql 是一个围绕着数据库表结构行数据索引最后生成的crud的操作的集合 age字段添加索引&#xff0c;就你可以通过索引快速找到所属的值 存储引擎? InnoDB和MISAM 1:InnoDB支持事务,MyISAM不支持(因为它没有向InnoDB的 undo log / redo log做一个事务的…...

浙江省住房和城乡建设厅网站/重庆网络推广公司

1.利用时间戳来获得随机数 利用System.currentTimeMillis&#xff08;&#xff09;获得时间的位数&#xff0c;例如&#xff1a;个位&#xff0c;十位&#xff0c;百位…等等。 例如&#xff1a; int number1 (int)(System.currentTimeMillis() % 10); #获得时间个位数 int …...

为推广网站做的宣传活动/搜索引擎优化seo应用

浮动的特点 1.脱离文档流 2.浮动元素会脱离文档流并向左/向右浮动&#xff0c;直到碰到父元素或另一个浮动元素 3.会导致父元素高度坍塌 早期为实现文字环绕效果 清除浮动 一个常用的clearfix清除浮动方法&#xff1a; .clearfix:before,//befor以解决现代浏览器上边距折叠的问…...

网站绝对路径/百度开放平台

Python调用C、C库sf2gis163.com2014年9月24日1 目标&#xff1a;Python调用C/C中的类或方法ctypes是Python扩展库&#xff0c;自2.5以后开始加入Python。Ctypes提供了C/C与Python之间交互的映射关系&#xff0c;将库映射为一个对象。用于调用C/C库。2 原理python使用c api dlop…...