图解RabbitMQ七种工作模式生产者消费者模型的补充

文章目录

  • 1.消费者模型
  • 2.生产者-消费者模型注意事项
    • 2.1资源释放顺序问题
    • 2.2消费者的声明问题
    • 2.3虚拟机和用户的权限问题
  • 3.七种工作模式
    • 3.1简单模式
    • 3.2工作模式
    • 3.3发布/订阅模式
    • 3.4路由模式
    • 3.5通配符模式
    • 3.6RPC通信
    • 3.7发布确认

1.消费者模型

之前学习的这个消息队列的快速上手,只学习了生产者的这个代码编写,并且可以看到这个生产者生产的这个消息的查看;

今天补充一下这个消费者的:这个消费者的和生产者的在很多的地方都是相似的,,例如前面的这个建立连接,开发信道之类的,就是这个消费者进行这个消费消息的时候是对于这个handleDelivery方法进行重写

image-20241201114400423

1)username这个表示的是我们的admin的名字(也就是我们的用户名字)
2)password是我们创建这个用户的时候设置的密码(不是我们的登录密码)
3)virtualhost就是我们的虚拟主机,这个虚拟主机管理我们创建的这些用户;
4)5672就是消息队列上面的这个默认的端口号;
5)sethost就是我们的云服务器的公网ip地址(我自己是用的云服务器);

下面的这个就是idea的控制台上面打印的这个信息:

image-20241201114218429

这个时候,我们去这个查看:发现数据全部都被释放了,但是原本我们是有很多的信息的,他却只打印了一个信息,因此我们可以设置这个休眠的过程,让这个消费者打印所有的消息;

image-20241201114732895

首先,我们还是需要创建消息,就是让这个生产者进行生产(因为现在已经全部被释放了),我们可以设置一个循环,多生产一些;

image-20241201115048792

这个时候页面会进行自动刷新,我们的这个生产的内容消息就会显示出来:

image-20241201115145573

消费者休眠之后,控制台查看:我们可以发现使用这个休眠之后,信息全部显示出来:

QQ_1733025324888

2.生产者-消费者模型注意事项

2.1资源释放顺序问题

下面的这个就是想要解释我们的资源的释放的问题;

下面的这个是先关闭我们的信道,然后是断开这个生产者和消费者之间的这个链接;

如果我们逆向操作,就是把这个释放资源的先后顺序进行调整,这个时候就会出现问题,这个主要是因为我们的连接断开的时候默认这个信道就关闭了;

因此,我们可以先关闭这个信道,再断开连接,但是不可以断开连接之后关闭信道;

image-20241201180201442

2.2消费者的声明问题

下面的这个声明队列的这个内容是可以省略的(针对于消费者而言的);

前提是我们的这个队列是存在的,这个时候我们的33行指定了这个queue,这个时候不会报错,因为我们即使没有声明,33行使用的时候也是可以找到这个queue的;

但是如果我们把这个queue删除了,就是这个不存在了,这个时候我们进行声明,33行进行使用,这个时候也不会报错,相反,使用的时候会根据我们的这个33行的代码创建这个channel出来;

如果我们的这个queue不存在,我们也不生命,在33行直接使用,这个时候就会报错,因为根本找不到这个队列;

image-20241201180456454

2.3虚拟机和用户的权限问题

1)还是之前说过的这个问题:就是我们的一个虚拟机可以对于多个用户进行管理,这个时候我们需要保证我们操作的这个用户是可以有虚拟机管理的这个权限的,否则是无法进行这个生产和消费的过程的;

2)一般我们日常学习是使用一个虚拟主机,在这个虚拟主机上面对于多个用户进行管理,而且我们的这个用户名密码也需要相互对应,否则也是无法进行消息的发送和接受的;

3.七种工作模式

image-20241201181358770

image-20241201181426384

image-20241201181445511

3.1简单模式

简单模式就是我们上面实现的这个快速上手的案例:只有一个生产者,一个消费者的模式;

P:producer就是生产者;

C:comsumer就是消费者;

Quene:消息队列,对于信息进行缓存,生产者的消息放到这个消息队列里面,消费者从这个消息队列里面取出来消息;

image-20241201182053097

3.2工作模式

这个就是工作模式:一个生产者,多个消费者,生产者生产的消息,分配给所有的这个消费者,但是每一个消费者只是获取这个消息里面的一部分内容;

image-20241201182157183

适用场景:集群环境下面的异步处理;

例如我们只有一个12306,但是又很多的这个用户,这个时候12306就会把这个消息不加重复的给到每一个消费者,也就是我们的用户;

3.3发布/订阅模式

这个x表示的是交换机;

这个时候我们的这个c1和c2消费者接受的就是这个生产者的全部内容;

例如这个p生产的内容是10个消息,这个时候10个消息就会给c1一份,给c2一份,而不是像上面的这个工作模式(工作模式里面的这个消费者加起来的总和只有一份,这个发布模式是每一个消费者都是一份,这个就是两者之间的区别之一);

image-20241201182749228

另外一个区别也是显而易见的,就是我们的交换机,交换机主要是下面的几种类型:

1)fanout:广播,把消息交给所有绑定了交换机的队列,我们的这个发布订阅模式使用的就是这个类型的交换机(这个类型就是不进行任何筛选,只要我们有联系,我的这个消息就会给你一份);

2)direct:定向,这个就是把消息给到指定的这个队列里面去,3.4里面的路由模式使用的这个类型的交换机;

3)topic:通配符,把消息给指定的符合通配符要求的队列里面去,也就是下面的这个3.5里面的交换机的类型;

除此之外,我们需要了解一下这个绑定规则:

1)RoutingKey:这个表示的就是我们的生产者和交换机之间的这个绑定的规则;

2)Binding Key:这个表示的就是我们的路由器和消费者之间的这个绑定的规则;

下面会针对于routingKey和biningkey展开介绍和说明;

3.4路由模式

路由模式就是上面的这个发布订阅模式的变种,只不过是有了一定的这个筛选的标准和规则,这个下面的a,b,c就是对应的选择标准;

例如我们之前学习的这个日志的等级:error,warning,info就可以视为是这个a,b,c,符合这个error级别的消息就会到这个c1里面去,符合这个warning和info级别的就回到这个c2消费者里面去;

image-20241201183854340

3.5通配符模式

和上面的路由模式,这个使用的就是模糊匹配,上面的是相等才可以,我们这个是符合条件就可以,比路由模式更加灵活,使用与需要灵活的处理和进行消息的过滤的场景;

*表示的就是一个字符,#表示的就是一个或者多个字符,这个就是通配符的具体的含义;

image-20241201184728058

3.6RPC通信

1)这个下面就是我们的客户端和服务端,没有生产者和消费者;

2)客户端发送消息到这个指定的队列上面,消息属性里面有这个reply和correlation,这个correlation就是最后和接收到的消息进行校验的,reply就是告诉我们的服务器把返回的消息放到这个指定的队列里面去;

3)我们的服务器就是把消息放到这个指定的毁掉队列reply_to里面去,客户端收到消息之后检查这个correlation属性是不是一样的,确保这个就是自己期望的响应的内容;

image-20241201185522790

3.7发布确认

这个就类似于我们学习网络通信时候的这个里面的确认应答的机制,返回一个ack;

这个是我们的生产者和我们的消息队列服务器之间进行这个消息的确认和应答,没有这个消费者的参与,因为这个就是为了确保我们的这个生产者生产的这个消息被我们的消息队列的这个服务器接收到;

image-20241201184400424

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

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

相关文章

头歌 Linux之线程管理

第1关:创建线程 任务描述 通常我们编写的程序都是单进程,如果在一个进程中没有创建新的线程,则这个单进程程序也就是单线程程序。本关我们将介绍如何在一个进程中创建多个线程。 本关任务:学会使用C语言在Linux系统中使用pthrea…

BioDeepAV:一个多模态基准数据集,包含超过1600个深度伪造视频,用于评估深度伪造检测器在面对未知生成器时的性能。

2024-11-29, 由罗马尼亚布加勒斯特大学创建BioDeepAV数据集,它专门设计来评估最先进的深度伪造检测器在面对未见过的深度伪造生成器时的泛化能力,这对于提高检测器的鲁棒性和适应性具有重要意义。 数据集地址:biodeep 一、研究背景&#xff1…

工业—使用Flink处理Kafka中的数据_ChangeRecord1

使用 Flink 消费 Kafka 中 ChangeRecord 主题的数据,当某设备 30 秒状态连续为 “ 预警 ” ,输出预警 信息。当前预警信息输出后,最近30

Flink四大基石之State(状态) 的使用详解

目录 一、有状态计算与无状态计算 (一)概念差异 (二)应用场景 二、有状态计算中的状态分类 (一)托管状态(Managed State)与原生状态(Raw State) 两者的…

opencv-android编译遇到的相关问题处理

1、opencv-android sdk下载 下载地址:https://opencv.org/releases/ 下载安卓SDK即可 2、解压下载好的SDK 3、导入opencv的SDK到安卓项目中 导入步骤在/OpenCV-android-sdk/sdk/build.gradle文件的注释中写的非常详细,大家可安装官方给出的步骤导入。…

OpenSSH-9.9p1 OpenSSL-3.4.0 升级步骤详细

前言 收到漏洞扫描通知 OpenSSH 安全漏洞(CVE-2023-38408) OpenSSH 安全漏洞(CVE-2023-51385) OpenSSH 安全漏洞(CVE-2023-51384) OpenSSH 安全漏洞(CVE-2023-51767) OpenSSH 安全漏洞(CVE-2023-48795) OpenSSH(OpenBSD SecureShell)是加拿大OpenBSD计划…

Python毕业设计选题:基于Flask的医疗预约与诊断系统

开发语言:Python框架:flaskPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 系统首页 疾病信息 就诊信息 个人中心 管理员登录界面 管理员功能界面 用户界面 医生…

sql删除冗余数据

工作或面试中经常能遇见一种场景题:删除冗余的数据,以下是举例介绍相应的解决办法。 举例: 表结构: 解法1:子查询 获取相同数据中id更小的数据项,再将id不属于其中的数据删除。-- 注意:mysql中…

数据链路层(四)---PPP协议的工作状态

1 PPP链路的初始化 通过前面几章的学习,我们学了了PPP协议帧的格式以及组成,那么对于使用PPP协议的链路是怎么初始化的呢? 当用户拨号上网接入到ISP后,就建立起了一条个人用户到ISP的物理链路。这时,用户向ISP发送一…

基于“微店 Park”模式下 2+1 链动模式商城小程序的创新发展与应用研究

摘要:本文以“微店 Park”从“开店工具”向“众创平台”的转型为背景,深入探讨 21 链动模式商城小程序在该平台情境下的应用潜力与创新发展路径。通过剖析“微店 Park”的运营模式,包括灵活承租、低成本入驻、多元流量引流等特点,…

《船舶物资与市场》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答 问:《船舶物资与市场》是不是核心期刊? 答:不是,是知网收录的正规学术期刊。 问:《船舶物资与市场》级别? 答:国家级。主管单位:中国船舶集团有限公司 主办单…

2024年认证杯SPSSPRO杯数学建模B题(第一阶段)神经外科手术的定位与导航解题全过程文档及程序

2024年认证杯SPSSPRO杯数学建模 B题 神经外科手术的定位与导航 原题再现: 人的大脑结构非常复杂,内部交织密布着神经和血管,所以在大脑内做手术具有非常高的精细和复杂程度。例如神经外科的肿瘤切除手术或血肿清除手术,通常需要…

ElementUI 问题清单

1、form 下面只有一个 input 时回车键刷新页面 原因是触发了表单默认的提交行为&#xff0c;给el-form 加上submit.native.prevent就行了。 <el-form inline submit.native.prevent><el-form-item label"订单号"><el-inputv-model"query.order…

vulnhub靶场之momentum-2

前言 靶机采用virtual box虚拟机&#xff0c;桥接网卡 攻击采用VMware虚拟机&#xff0c;桥接网卡 靶机&#xff1a;momentum-2 192.168.1.40 攻击&#xff1a;kali 192.168.1.16 主机发现 使用arp-scan -l扫描 信息收集 使用namp扫描 这里的命令对目标进行vulner中的漏…

Python语法基础---正则表达式

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 我们这个文章所讲述的&#xff0c;也是数据分析的基础文章&#xff0c;正则表达式 首先&#xff0c;我们在开始之前&#xff0c;引出一个问题。也是我们接下来想要解决的问题。…

小家电出海,沃丰科技助力保障售后服务的及时性与高效性

随着全球化步伐的加快&#xff0c;小家电行业也逐渐迈向国际市场&#xff0c;面向全球消费者提供服务。然而&#xff0c;跨国界的销售和服务挑战也随之而来&#xff0c;尤其是售后服务的及时性与高效性成为了企业亟需解决的问题。沃丰科技凭借其全渠道在线客服、工单系统和视频…

Vulnhub靶场 Matrix-Breakout: 2 Morpheus 练习

目录 0x00 准备0x01 主机信息收集0x02 站点信息收集0x03 漏洞查找与利用1. 文件上传2. 提权 0x04 总结 0x00 准备 下载连接&#xff1a;https://download.vulnhub.com/matrix-breakout/matrix-breakout-2-morpheus.ova 介绍&#xff1a; This is the second in the Matrix-Br…

美畅物联丨智能监控,高效运维:视频汇聚平台在储能领域的实践探索

在当今全球能源格局不断变化的大背景下&#xff0c;对清洁能源的需求正以惊人的速度增长。储能项目作为平衡能源供需、提升能源利用效率的关键环节&#xff0c;其规模和复杂度也在不断攀升。在储能项目的运营管理过程中&#xff0c;安全监控、设备运维以及数据管理等方面面临着…

提升用户体验、创新产品与高效运营,企业发展三驾马车

​在当今竞争激烈的市场环境中&#xff0c;企业要想脱颖而出并持续发展&#xff0c;需同时在提升用户体验、推动产品创新以及实现内部高效运营方面下功夫。 提升用户体验至关重要。它能提高用户满意度和忠诚度&#xff0c;增加用户口碑与推荐&#xff0c;提升企业品牌形象。可通…

基于ZooKeeper搭建Hadoop高可用集群

ZooKeeper搭建Hadoop高可用集群 在之前安装的Hadoop3.3.6集群中HDFS NameNode 和 YARN ResourceManager 都是单节点&#xff0c;集群不具有高可用性。 HDFS 高可用架构 HDFS 高可用架构主要组件&#xff1a; Active NameNode 和 Standby NameNode&#xff1a; 两台 NameNode…