RabbitMQ中的核心概念和交换机类型

news2024/11/15 15:52:58

目录

  • 一、RabbitMQ相关概念
  • 二、Exchange类型
  • 三、RabbitMQ概念模型总结

一、RabbitMQ相关概念

Producer:生产者,就是投递消息的一方。生产者创建消息,然后发布到RabbitMQ中。消息一般可以包含两个部分:消息体和附加消息。

  • 消息体:在实际应用中,消息体一般是一个带有业务逻辑结构的数据,比如一个JSON字符串。当然可以进一步对这个消息体进行序列化操作。
  • 附加消息:用来表述这条消息,比如目标交换器的名称、路由键和一些自定义属性等等。

Broker:消息中间件的服务节点。对于RabbitMQ来说,一个Broker可以简单地看做一个RabbitMQ服务节点,或者RabbitMQ服务实例,也可以将Broker看作一台RabbitMQ服务器。

Virtual Host:虚拟主机,表示交换器、消息队列和相关对象。虚拟主机是共享相同的身份认证和加密环境的独立服务器域。每个vhost本质上就是mini版的RabbitMQ服务器,拥有自己的队列、交换器、绑定和权限价值。vhost是AMQP概念的基础,必须在连接时指定,RabbitMQ默认的vhost是 /

Channel:频道或信道,是建立在Conection连接智商的一种轻量级的链接。大部分的操作是在Channel这个接口中完成的,包括定义队列的生命queueDeclare交换机的生命exchangeDeclare队列的绑定queueBind发布消息basicPublish消费消息basicConsume等。

如果把Connection比作一条光纤电缆的话,那么Channel信道就比作成光纤电缆中的其中一束光纤。一个Connection上可以创建任意数量的Channel。

RoutingKey:路由键。生产者将 消息发给交换器的时候,一般会指定一个RoutingKey,用来制定这个消息的路由规则。RoutingKey需要与交换器类型绑定键(Binding Key)联合使用。在交换器类型和绑定键(BindingKey)固定的情况下,生产者可以在发送消息给交换器时,通过自定RoutingKey来决定消息流向哪里。

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

Queue:队列,是RabbitMQ的内部对象,用于存储消息。
在这里插入图片描述

Binding:绑定,RabbitMQ中通过绑定将交换器与队列关联起来,在绑定的时候一般会指定一个绑定键(BindingKey),这样RabbitMQ就知道如何正确地将消息路由到队列了。
在这里插入图片描述

Consumer:消息者,就是接收消息的一方。消费者连接到RabbitMQ服务器,并订阅到队列上。
整体运转流程如下:
在这里插入图片描述
在这里插入图片描述生产者发送消息的过程如下:

  1. 生产者连接到RabbitMQ Broker,建立一个连接(Connection),开启一个信道(Channel)。
  2. 生产者声明一个交换器,并设置相关属性,比如交换机类型、是否持久化等。
  3. 生产者声明一个队列并设置相关属性,比如是否排它、是否持久化、是否自动删除。
  4. 生产者通过路由键讲交换器和队列绑定起来。
  5. 生产者发送消息至RabbitMQ Broker,其中包含路由键、交换器等信息。
  6. 相应的交换器根据接收到的路由键查找相匹配的队列。
  7. 如果找到,则将从生产者发送过来的消息存入相应的队列中。
  8. 如果没有找到,则根据生产者配置的属性选择丢弃还是回退给生产者。
  9. 关闭信道、关闭连接。

二、Exchange类型

RabbitMQ常用的交换器类型有fanout、direct、topic、headers这4种。

  • fanout:扇形交换机,它会把所有发送到该交换器的消息路由到所有与该交换器绑定的队列中。
    在这里插入图片描述

  • direct:直连交换机,它会把消息路由到那些BindingKeyRoutingKey完全匹配的队列中。
    在这里插入图片描述

  • topic:主题交换机,与direct类似,但它可以通过通配符进行模糊匹配,*.代表匹配一个字符,#代表匹配多个字符。

  • headers:头交换机,不依赖于路由键的匹配规则来路由消息,而是根据发送的消息内容中的headers属性进行匹配。 但headers类型的交换器性能很差,而且也不实用。


三、RabbitMQ概念模型总结

下面让我们用一幅图来总结一下RabbitMQ中的概念模型,所有RabbitMQ对象以虚拟主机区分,如下:
RabbitMQ概念模型

上面我们介绍了4种交换机,Fanout交换机Direct交换机Topic交换机Headers交换机,其实还有一种是默认交换机。发送消息时如果只指定了交换机而没有指定队列,那么消息会通过默认交换机直接转发到指定的队列中,比如上图中的消息1

消息2和消息3发送到了exchange-2上,该交换机类型为Direct,因此消息2会通过路由key order发送到queue-3上,而消息3会通过路由key sms发送到queue-4上。

消息4发送到了exchange-3上,该交换机类型为Topic,路由key为com.order.create,同时满足通配符com.#*.order.*,因此消息4会发送到queue-5queue-6上。

消息5发送到了exchange-4上,该交换机类型为Headers,header信息为x=1,满足匹配条件,因此消息5会发送到queue-7上。

在这里插入图片描述

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

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

相关文章

利用Nginx可视化管理工具+Cpolar实现本地服务远程访问

文章目录 前言1. docker 一键安装2. 本地访问3. Linux 安装cpolar4. 配置公网访问地址5. 公网远程访问6. 固定公网地址 前言 Nginx Proxy Manager 是一个开源的反向代理工具,不需要了解太多 Nginx 或 Letsencrypt 的相关知识,即可快速将你的服务暴露到外…

nextjs-一个基于React的全栈框架

一、nextjs基本介绍 Next.js是一个基于React的轻量级框架,用于构建React应用程序。它在React的基础上提供了一些增强功能,包括服务器渲染(SSR)、静态生成(SSG)、路由等。Next.js的目标是简化React应用程序…

工业自动化控制通信协议Profinet系列-2、编译p-net在虚拟机树莓派上运行示例

工业自动化控制通信协议Profinet系列-2、编译p-net在虚拟机树莓派上运行示例 文章目录 工业自动化控制通信协议Profinet系列-2、编译p-net在虚拟机树莓派上运行示例一、前言二、树莓派虚拟机编译安装测试1、树莓派desktop下载及虚拟机安装2、下载编译安装p-net及运行demo程序 三…

【Javascript保姆级教程】if判断语句的三种形式

文章目录 前言一、if语句1.1 怎么使用1.2 示例代码1.3 示例代码2 二、if...else语句2.1 怎么使用2.2 示例代码2.3 示例代码 三、if...else if...语句3.1 怎么使用3.2 示例代码3.3 示例代码 总结 前言 嗨,欢迎来到Javascript保姆级教程!在编写代码时&…

学习笔记1——SSM的基础知识

SSM的基础知识 cs架构:多个客户端可以访问一台服务器 请求:协议://主机[: 端口][/路径][?查询参数] http就是一种协议,https是一种带加密的协议更加安全一点主机:localhost端口号:因为tomcat和mysql都是…

Babylonjs学习笔记(二)——创建基本材质

书接上回,这里讨论给网格添加材质!!! 准备好材质 1、创建材质球 /*** 创建网格材质* param scene 场景对象* returns 材质对象*/ const createGroundMaterial(scene:Scene):StandardMaterial>{const texArray:Texture[] []// …

计网----数据包在传输中的变化过程,单播组播和广播,APR协议,APR代理,免费ARP,DNS协议,路由数据转发过程

计网----数据包在传输中的变化过程,单播组播和广播,APR协议,APR代理,免费ARP,DNS协议,路由数据转发过程 一.数据包在传输中的变化过程(在同一个路由器下) 1.传输数据时&#xff0c…

《SQLi-Labs》04. Less 23~28a

title: 《SQLi-Labs》04. Less 23~28a date: 2023-10-19 19:37:40 updated: 2023-10-19 19:38:40 categories: WriteUp:Security-Lab excerpt: 联合注入,注释符过滤绕过之构造闭合,%00 截断、二次注入、报错注入,空格过滤绕过&…

蓝牙助听模块场景分析之一

蓝牙助听模块场景分析之一 使用经典蓝牙助听,低成本,cVc降噪,支持蓝牙音频。 利用高通cVc算法,本地麦克风(支持单麦和双麦)声音输入到高通QCC芯片,然后QCC芯片DSP(cVc算法&#xf…

第十五章总结

一.输入/输出流 1.输入流 InputStrema类是字节输入流的抽象类,它是所有字节输入流的父类。 该类中所有方法遇到错误都会引发IOException异常。 read()方法:从输入流中读取数据的下一个字节。返回0~255的int字节值。如果因为已经到达流末尾而没…

开源智能体来啦!港大团队发布OpenAgents,可以搞数据分析、聊天、支持200+插件

夕小瑶科技说 原创 作者 | 智商掉了一地、ZenMoore 港大的研究团队最近发布了一个新的开源 Agent 框架,名为 OpenAgents. 它可以用于实际用户场景,特别是在使用自然语言执行复杂任务的情况下。先前的语言智能体框架主要关注概念验证或者供开发人员使用&…

6个无版权、免费、高清图片素材库

找免费无版权图片素材,就上这6个网站,超高质量,可商用,赶紧收藏! 1、菜鸟图库 https://www.sucai999.com/pic.html?vNTYwNDUx 网站主要为新手设计师提供免费素材,这些素材的质量都很高,类别也…

如何让你的Node.js应用程序处理数百万的API请求

目录 一、了解 Node.JS 和 API 请求 二、优化 NodeJS 以实现高性能 1.使用异步操作 2.实现缓存 3.优化数据库查询 4.负载平衡 5.水平扩展 三、测试和监控性能 1.负载测试 2.应用程序性能监控(APM) 四、结论 一、了解 Node.JS 和 API 请求 在我们深入研究这些技术之…

【C语言基础】结构体中内嵌联合体|联合体中内嵌结构体

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…

【算法|动态规划No.22】leetcode115. 不同的子序列

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…

jmeter接口自动化测试

前面我们复习了jmeter 的非图形化界面运行我们的测试接口。 大家可以翻看往期jmeter的文章。 具体来说就是:jmeter -n -t ****.jmx -l ****.jtl -e -o **** (*号代表路径) 生成了测试报告。 但是这个非图形化运行有个缺点,就是只能运…

Pygame中实现图片的移动

在《Pygame中将鼠标形状设置为图片2-1》和《Pygame中将鼠标形状设置为图片2-2》中提到将鼠标设置为指定图片。接下来在该文章涉及到的代码基础之上,实现图片的移动,效果如图1所示。 图1 图片移动效果 从图1中可以看出,导入一个大猩猩的图片&…

DailyPractice.2023.10.19

文章目录 1. 24. 两两交换链表中的节点2. 23. 合并 K 个升序链表3.148. 排序链表4.236. 二叉树的最近公共祖先5.78. 子集6.138. 随机链表的复制7.25. K 个一组翻转链表 1. 24. 两两交换链表中的节点 24. 两两交换链表中的节点 /*** Definition for singly-linked list.* stru…

扫描全能王文档矫正逆向记录

背景 扫描全能王有个功能是将弯曲的文本拉直成平直的文本。在扫描全能王的app上,这个功能的入口在拍书籍的tab。同时在图片编辑页面,也有个按钮可以触发这个功能。它的效果大概如下。 这篇文章主要介绍如何逆向这个算法 初步定位 对扫描王apk初步逆向…

【软考-中级】系统集成项目管理工程师 【15 信息 (文档) 和配置管理】

持续更新。。。。。。。。。。。。。。。 【第十五章】信息(文档)和配置管理 知识精讲考点 1:软件文档一般分为三类:开发文档、产品文档、管理文档。考点 2:文档的质量可以分为四级:考点 3:配置管考点 4:考点 5:考点6:考点 7:配置项版本号:考点 8:考点9…