RabbitMQ(三)工作原理及核心概念

news2024/10/5 19:16:51

目录

    • 工作原理图
    • 1.Connection 连接
    • 2.Channel 信道
    • 3.Virtual host 虚拟主机
    • 4.Queue 队列
    • 5.Exchange 交换机
      • 5.1 direct
      • 5.2 fanout
      • 5.3 topic
      • 5.4 headers

在这里插入图片描述

官网地址:https://www.rabbitmq.com/

下载地址:https://www.rabbitmq.com/download.html

RabbitMQ 的5大核心概念:

  • Connection:连接
  • Channel:信道
  • Exchange:换机
  • Queue:队列
  • Virtual host:虚拟主机

工作原理图

在这里插入图片描述

  • 中间的 Broker 表示 RabbitMQ 服务,每个 Broker 里面至少有一个 Virtual host 虚拟主机;
  • 每个虚拟主机中有自己的 Exchange 交换机、Queue 队列,Exchange 与 Queue 通过 Binding 绑定;
  • Producer 和 Consumer 通过 Connection 来保持联系,然后在 Connection 的基础上建立若干 Channel 信道,用来发送和接收消息;
  • Connection 和 Channel 类似电缆和光纤的关系,一对多。

1.Connection 连接

  • 每个 producer 或者 consumer 要通过 RabbitMQ 发送与消费消息,首先就要与 RabbitMQ 建立连接,这个连接就是Connection。Connection是一个TCP长连接。

2.Channel 信道

  • Channel是在Connection的基础上建立的虚拟连接,RabbitMQ中大部分的操作都是使用Channel完成的,比如:声明Queue、声明Exchange、发布消息、消费消息等。

  • 看到此处,你是否有这样一个疑问:既然已经有了Connection,我们完全可以使用Connection完成Channel的工作,为什么还要引入Channel这样一个虚拟连接的概念呢?因为现在的程序都是支持多线程的,如果没有Channel,那么每个线程在访问RabbitMQ时都要建立一个Connection这样的TCP连接,对于操作系统来说,建立和销毁TCP连接是非常大的开销,在系统访问流量高峰时,会严重影响系统性能。

  • Channel就是为了解决这种问题,通常情况下,每个线程创建单独的Channel进行通讯,每个Channel都有自己的channel id帮助Broker和客户端识别Channel,所以Channel之间是完全隔离的。

3.Virtual host 虚拟主机

​ Virtual host是一个虚拟主机的概念,一个Broker中可以有多个Virtual host,每个Virtual host都有一套自己的Exchange和Queue,同一个Virtual host中的Exchange和Queue不能重名,不同的Virtual host中的Exchange和Queue名字可以一样。这样,不同的用户在访问同一个RabbitMQ Broker时,可以创建自己单独的Virtual host,然后在自己的Virtual host中创建Exchange和Queue,很好地做到了不同用户之间相互隔离的效果。

4.Queue 队列

​ Queue是一个用来存放消息的队列,生产者发送的消息会被放到Queue中,消费者消费消息时也是从Queue中取走消息。

5.Exchange 交换机

​ Exchange是一个比较重要的概念,它是消息到达RabbitMQ的第一站,主要负责根据不同的分发规则将消息分发到不同的Queue,供订阅了相关Queue的消费者消费到指定的消息。那Exchange有哪些分发消息的规则呢?这就要说到Exchange的4种类型了:direct、fanout、topic、headers。

​ 在介绍这4种类型的Exchange之前,我们先来了解一下另外一个比较重要的概念:Routing key,翻译成中文就是路由键。当我们创建好Exchange和Queue之后,需要使用Routing key(通常叫作Binding key)将它们绑定起来,producer在向Exchange发送一条消息的时候,必须指定一个Routing key,然后Exchange接收到这条消息之后,会解析Routing key,然后根据Exchange和Queue的绑定规则,将消息分发到符合规则的Queue中。

5.1 direct

​ direct的意思是直接的,direct类型的Exchange会将消息转发到指定Routing key的Queue上,Routing key的解析规则为精确匹配。也就是只有当producer发送的消息的Routing key与某个Binding key相等时,消息才会被分发到对应的Queue上。

5.2 fanout

​ fanout是扇形的意思,该类型通常叫作广播类型。fanout类型的Exchange不处理Routing key,而是会将发送给它的消息路由到所有与它绑定的Queue上。

5.3 topic

topic的意思是主题,topic类型的Exchange会根据通配符对Routing key进行匹配,只要Routing key满足某个通配符的条件,就会被路由到对应的Queue上。通配符的匹配规则如下:

● Routing key必须是一串字符串,每个单词用“.”分隔;

● 符号“#”表示匹配一个或多个单词;

● 符号“*”表示匹配一个单词。

例如:“*.123” 能够匹配到 “abc.123”,但匹配不到 “abc.def.123”;“#.123” 既能够匹配到 “abc.123”,也能匹配到 “abc.def.123”。

5.4 headers

​ 日常工作中,以上三种类型的Exchange已经能够满足我们基本上所有的需求了,headers模式并不经常使用,我们只需要对headers Exchange有一个基本的了解就可以了。

​ headers Exchange中,Exchange与Queue之间的绑定不再通过Binding key绑定,而是通过Arguments绑定。





参考地址:

  1. RabbitMQ的工作模式及原理,https://baijiahao.baidu.com/s?id=1732891548341088166&wfr=spider&for=pc

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

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

相关文章

chk文件恢复和文件恢复的区别有哪些?

文件恢复也就是我们常说的数据恢复,一般用于恢复误删除、损坏的文件数据,那么chk文件恢复又是什么意思呢?两者有什么区别呢?文件恢复市面上常见的文件恢复软件,一般都是用于恢复那些被删除、损坏的文件数据恢复&#x…

Jenkin权限控制——项目矩阵授权策略

开启授权策略 Jenkins的项目权限控制通过【授权策略】实现,【授权策略】需要plugins提供,首先需要安装Role-based Authorization Strategy 安装Role-based Authorization Strategy 管理Jenkins——》插件管理——》搜素——》Role-based Authorizatio…

距离教资考试还有两天,你的照片准备好了没有?

距离教资考试还有两天不知道你的教资报名照准备好了没有?照片不合格可是不能报名成功的! ​ ​ 1、本人近6个月以内免冠正面彩色证件照 2、一寸白底,比例3:4 3、不允许戴帽子、头巾、发带、墨镜 4、照片中显示考生头部和肩膀上部 5、照片为jpg或jpe…

云游戏渐入佳境,众玩家同行不同路

配图来自Canva可画 有人曾在2019年问道:“云游戏能成为5G第一个2C的杀手级应用吗?”在当时,几乎所有人对这个问题的回答,都有一种“只缘身在此山中”的迷雾感,还看不清脚下的路会延伸到何处。彼时各大厂商都在备战&am…

MQTT 发布/订阅模式介绍

MQTT 发布/订阅模式 发布订阅模式(Publish-Subscribe Pattern)是一种消息传递模式,它将发送消息的客户端(发布者)与接收消息的客户端(订阅者)解耦,使得两者不需要建立直接的联系也不…

向量检索服务迭代演进

背景在搜索推荐系统里,有一个重要的服务是向量检索服务,也就是求向量在空间中最相近的topk个向量,在搜索系统里,涉及大量的召回引擎可能需要用到向量检索服务,需要在线实时计算,并且可快速响应;…

Jetpack Compose中的startActivityForResult的正确姿势

之前在 Jetpack Compose中的导航路由 里简单的提到了从 Compose 导航到其他 Activity 页面的方式,对于不带返回结果的则就是跟以前一样简单的启动Activity的代码,而如果是startActivityForResult方式的,需要使用带回调的方式去启动&#xff0…

为什么 TCP 协议有性能问题

TCP 协议可以说是今天互联网的基石,作为可靠的传输协议,在今天几乎所有的数据都会通过 TCP 协议传输,然而 TCP 在设计之初没有考虑到现今复杂的网络环境,当你在地铁上或者火车上被断断续续的网络折磨时,你可能都不知道…

Python 机器学习 数据归一化

众所周知机器学习使计算机从研究数据和统计数据中学习机器学习是向人工智能(AI)方向迈进的一步。机器学习是一个分析数据并学习预测结果的程序。此篇文章主要介绍Python机器学习的数据归一。1、数据归一化当您的数据具有不同的值,甚至具有不同…

一些神经网络基础知识归纳

神经网络(NN)复杂度 NN复杂度,多用NN层数和NN参数个数表示 如上图示 空间复杂度 层数隐藏层的层数1个输出层 上图为2层NN 总参数 3*44 4*2226 时间复杂度 乘加运算次数 3*44*220 指数衰减学习率 可以先用较大学习率,快速得…

KingbaseES V8R3数据库运维案例之---不完整的启动包(incomplete startup packet)复现

案例说明: 在KingbaseES V8R3数据库的sys_log日志中,出现以下故障信息“不完整的启动包(incomplete startup packet)”日志信息。本案例复现此日志信息发生的原因。 如下图所示,日志信息: 适用版本: KingbaseES V8R3 1…

计算最大公约数和最小公倍数被Java程序员用代码写出来啦

沉淀、分享、成长,让自己和他人都能有所收获!😄 一、前言 嘿,怎么突然讲到最大公约数了? 这么想你肯定是没有好好阅读前面章节中讲到的RSA算法,对于与欧拉结果计算的互为质数的公钥e,其实就需…

树莓派系统安装,网络配置,系统配置

如何安装树莓派的系统 以及 树莓派新系统SSH连接被拒绝的解决方法 1. 烧录方式1(官方,简单) 在下面网站下载 https://www.raspberrypi.com/software/ 打开以后选64位系统 选择安装的u盘 设置ssh,WiFi,登录密码等…

MySQL高级【表级锁】

1:表级锁1.1:介绍表级锁,每次操作锁住整张表。锁定粒度大,发生锁冲突的概率最高,并发度最低。应用在MyISAM、 InnoDB、BDB等存储引擎中。 对于表级锁,主要分为以下三类: 表锁元数据锁&#xff0…

PLC常见的输入设备及其接线方式列举

PLC常见的输入设备有按钮、行程开关、接近开关、转换开关、拨码器、各种传感器等,输出设备有继电器、接触器、电磁阀等。下面,我们来详细看看PLC如何与这些设备正确地连接输入和输出线路。1.PLC与主令电器类设备的连接下图是PLC与按钮、行程开关、转换开…

现代C++并行与并发笔记 附C++17线程池实现项目实战

文章目录让程序在特定时间休眠启动和停止线程互斥量(mutex)进行延迟初始化——std::call_once将执行的程序推到后台——std::async信号量(condition_variable)C11 线程池前置知识返回值类型推导 result_of 和 invoke_resultpackag…

天翼物联获中国信通院2022 AIoT先锋企业

近日,由中国信息通信研究院组织开展的2022 AIoT先锋企业评选活动成果发布,中国电信天翼物联凭借为AIoT发展作出的积极贡献获“2022 AIoT先锋企业”,是唯一获得该奖项的通信企业。 2022 AIoT先锋企业评选活动由中国信息通信研究院组织开展&…

IDEA 下载依赖包源码报错Sources not found for: org.springframework.cloud:XXX

IDEA 在使用某些类方法想看下源码时,由于只有 class 反编译的类文件,没有原始 Java 文件,想要将源码下载下来,右下角一直报一个错误 Cannot download sources Sources not found for:XXX,很是烦恼,怎么解决…

数据结构---线性表课后习题详解(朱昌杰编著)

刘佳瑜*,王越 *, 黄扬* , 张钊* (淮北师范大学计算机科学与技术学院,安徽 淮北) *These authors contributed to the work equllly and should be regarded as co-first authors. 🌞欢迎来到数据结构的世界 🌈博客主页&#xff1…

【Docker】docker部署前后端分离项目( 前:nginx + vue 后:springboot+ redis + mysql)

目录一.安装docker二.docker安装和配置nginx1.拉取nginx2.创建临时nginx容器3.从nginx容器复制 nginx.conf 文件到宿主机4.删除临时nginx容器5.启动真正的nginx容器6.查看是否挂载成功7.配置nginx.conf 和 vue的包放到指定位置三 docker安装部署redis1.安装redis2.部署redis四 …