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

news2025/2/26 9:31:42

文章目录

  • 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.coloradmin.cn/o/2254295.html

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

相关文章

制造业管理系统中ERP与MES的区别

在当今工业4.0的背景下,数字化管理已成为现代工厂不可或缺的一部分。在这一进程中,企业资源计划(ERP)系统和制造执行系统(MES)扮演着关键角色。尽管如此,许多工厂的管理者对于ERP和MES的理解仍存…

面向初学者的 Ansys Mechanical 中的接触建模

接触概述 Ansys Mechanical 中的接触建模是仿真结构不同部分在各种条件下如何相互作用的关键方面。它涉及定义表面的接触方式,即它们是接触、滑动还是分离。Ansys Mechanical 提供了广泛的接触选项来准确建模这些交互,包括粘合、摩擦和无分离接触。每个…

【C++指南】C++内存管理 深度解析

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《C指南》 期待您的关注 目录 引言 一、C 内存管理概述 二、C内存区域划分 三、C 内存管理方式 🍃1.自动内存管理…

聚类算法全面解析:理论与实践结合

聚类(Clustering)是数据挖掘和机器学习中一类重要的无监督学习方法,旨在将数据划分为多个类别,使得类别内部的数据相似度高,而类别之间的数据差异较大。聚类广泛应用于图像分割、市场分析、生物信息学、文本挖掘等领域…

Python 批量剪辑视频片头片尾工具

Python 批量剪辑视频片头片尾工具 1.简介: 批量剪辑片头片尾的软件,让你的视频创作事半功倍,视频剪辑处理完成后,用户可以在指定文件夹中查看已经剪切完片头片尾的视频‌。这些工具不仅适用于个人用户进行日常的视频编辑工作&am…

大模型分类1—按应用类型

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl根据应用领域,大模型可分为自然语言处理、计算机视觉和多模态大模型。 1. 自然语言处理大模型(NLP) 1.1 应用领域与技术架构 自然语言处理大模型(NLP)的应用领域广泛,包括但不限于文本分类、…

保姆级教程用vite创建vue3项目并初始化添加PrimeVue UI踩坑实录

文章目录 一、什么是PrimeVue二、详细教程1.添加PrimeVue2.配置main.js3.添加自动引入4.配置vite.config.js5.创建测试页面 一、什么是PrimeVue PrimeVue 是一个用于 Vue.js 3.x 开发的一款高质量、广受欢迎的 Web UI 组件库。 官网地址:https://primevue.org/ 二、…

Go的Gin比java的Springboot更加的开箱即用?

前言 隔壁组的云计算零零后女同事,后文简称 云女士 ,非说 Go 的 Gin 框架比 Springboot 更加的开箱即用,我心想在 Java 里面 Springboot 已经打遍天下无敌手,这份底蕴岂是 Gin 能比。 但是云女士突出一个执拗,非我要…

php 系统函数 记录

PHP intval() 函数 PHP函数介绍—array_key_exists(): 检查数组中是否存在特定键名 如何使用PHP中的parse_url函数解析URL PHP is_array()函数详解,PHP判断是否为数组 PHP函数介绍:in_array()函数 strpos定义和用法 strpos() 函数查找字符串在另一字符串…

关于Chrome自动同步书签的解决办法

前言 并不一定适用所有用户, 目前我在网上搜集了一些资料,也做了一些尝试。 就我个人总结的经验来讲,分享大家以下几种办法: 1.书签同步插件 点击如下🔗: Chrome书签同步https://bm.famend.cn/ …

matrixzq:基于ℤq的纯python矩阵库

1. 引言 当希望使用纯 Python 代码对整数 q 模矩阵进行操作,以演示使用学习误差 (Learning-With-Errors,LWE) 的基于格的加密方案的一些原理时,找到了 Thom Ives 编写的优秀代码“纯 Python 中无需 Numpy 或 Scipy 的 BASIC 线性代数工具”&…

深度学习笔记——模型压缩和优化技术(蒸馏、剪枝、量化)

本文详细介绍模型训练完成后的压缩和优化技术:蒸馏、剪枝、量化。 文章目录 1. 知识蒸馏 (Knowledge Distillation)基本概念工作流程关键技术类型应用场景优势与挑战优势挑战 总结 2. 权重剪枝 (Model Pruning)基本原理二分类1. 非结构化剪枝(Unstructur…

【单片机】ESP32-S3+多TMC2209控制步进电机系列1 UART通信及无传感回零 硬件部分

目录 1. 硬件选型1.1 esp32硬件型号1.2 TMC2209 硬件型号 2 原理接线图2.1 esp32接线2.2 TMC2209接线2.2.1 单向通讯 不配置地址2.2.2 单向通讯 配置地址2.2.3 双向通讯 单UART 【本文采用】2.2.4 双向通讯 多UART 3. 成品效果 1. 硬件选型 1.1 esp32硬件型号 采用的是微雪ES…

【论文复刻】雾霾污染及ZF治理与经济高质量发展(2004-2020年)

一、数据来源: PM2.5数据根据美国哥伦比亚大学社会经济数据与应用中心提供的全球PM2.5的年均浓度数据整理计算而得,人均实际GDP是以2000年为基期进行平减处理获得的实际GDP,控制变量来自《中国城市统计年鉴》、国家统计局,内含原…

行列式计算方法

行列式(Determinant)是线性代数中一个重要的概念,用来描述方阵的一些性质,尤其是与矩阵的可逆性、特征值等有关。下面是几种常见的计算行列式的方法: 1. 2x2矩阵的行列式 对于一个2x2矩阵: 行列式计算公式…

Elastic Cloud Serverless:深入探讨大规模自动扩展和性能压力测试

作者:来自 Elastic David Brimley, Jason Bryan, Gareth Ellis 及 Stewart Miles 深入了解 Elasticsearch Cloud Serverless 如何动态扩展以处理海量数据和复杂查询。我们探索其在实际条件下的性能,深入了解其可靠性、效率和可扩展性。 简介 Elastic Cl…

基于SpringBoot的旅游管理系统设计与实现

标题: 《基于SpringBoot的旅游管理系统设计与实现》 摘要: 本研究的主要目标是设计与实现基于Spring Boot的现代化旅游管理系统,旨在有效解决传统系统存在的多项问题,如用户体验不佳、功能不完善以及安全性方面的隐患。随着互联网…

LeetCode 热题100(十五)【动态规划】(3)

15.7最长递增子序列(中等) 题目描述:leetcode链接 300. 最长递增子序列 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元…

精华帖分享|书中自有黄金屋系列2——格雷厄姆估值因子

本文来源于量化小论坛股票量化板块精华帖,作者为Benlyn,发布于2024年2月2日。 以下为精华帖正文: 01 前言 巴菲特一直强调“以合理的估值买入好公司”的投资理念,因此今天想给大家介绍一下与估值相关的内容。买股票买好公司固然…

干部谈话考察系统如何实现灵活定制和精准考评?

在当今社会,干部选拔与任用已成为各类组织内部管理的关键环节。为了确保选拔出的干部具备高素质和卓越能力,干部谈话考察系统应运而生。这一系统以其灵活定制和精准考评的特点,为组织提供了科学、高效的干部考察手段。 干部谈话考察系统通过集…