【基础】RabbitMQ 基础

news2024/11/24 5:58:52

RabbitMQ 基础

  • RabbitMQ 基本介绍
  • RabbitMQ 基本概念
    • Connection
    • Channel
    • Virtual Host
    • Queue
    • Exchange
      • direct
      • fanout
      • topic
      • headers

RabbitMQ 基本介绍

RabbitMQ 是使用 Erlang 语言开发的基于 AMQP 协议来实现的开源消息队列系统。

RabbitMQ 的特点:

  • 灵活路由:Exchange 交换机提供多种模式路由消息;

  • 可靠性:采用多种机制保证数据不丢失;

  • 高可用性:队列可以在集群中的机器上设置镜像,使得在部分节点出现问题的情况下队列仍然可用;

  • 可扩展性:多个RabbitMQ 节点可以组成一个集群,也可以根据实际业务情况动态地扩展集群中节点;

  • 多协议支持:RabbitMQ 除了原生支持 AMQP 协议,还支持 STOMP、MQTT 等多种消息中间件协议;

  • 多语言客户端:RabitMQ 几乎支持所有常用语言,比如 Java、Python 、Ruby 、PHP 、C# 、JavaScript 等;

  • 管理界面:RabbitMQ 提供了一个易用的用户界面,使得用户可以监控和管理消息、集群中的节点等;

  • 插件机制:RabbitMQ 提供了许多插件, 以实现从多方面进行扩展;

RabbitMQ 基本概念

RabbitMQ 的主要核心概念包括 Connection、Channel、Exchange、Queue、Virtua Host。

在这里插入图片描述

Connection

Connection 即连接,生产者与消费者进行消息的生产与消费都需要与 RabbitMQ 建立连接,Connection 是一个 TCP 的长连接。

Channel

Channel 是在 Connection 连接的基础上建立的虚拟连接,其目的是为了节省资源。因为建立 Connection TCP 连接的开销较大,若每次与 RabbitMQ 进行通信都建立 Connection 的话,对资源的需求量较大。

因此,引入 Channel 来解决上述问题,当主程序已经建立好 Connection 后,程序中的多个线程就可以通过 Channel 与 RabbitMQ 建立通信,每个 Channel 都拥有自己的 Channel id,各个 Channel 之间相互隔离。

RabbitMQ 中大部分的操作都是由 Channel 完成的,如声明 Exchange、声明 Queue、发布消息、接收消息等…

Virtual Host

Virual Host 即虚拟主机。在 Broker 中可以存在多个 Virtual Host,每个 Virtual Host 都拥有自己的一套 Exchange 以及 Queue,各 Virtual Host 之间互相隔离。因此,虚拟主机实现了不同用户之间的隔离。

在同一个 Virtual Host 中,Exchange 与 Queue 不能重名;但是在不同 Virtual Host 中,Exchange 与 Queue 可以同名。

Queue

Queue 即存放消息的队列,生产者将生产的消息存放在 Queue,等待消费者接收消息并进行消费。

Exchange

Exchange 是交换机,它是消息到达 RabbitMQ 的第一站。Exchange 可以理解成一个路由器,其根据用户制定好的路由分发规则,将消息转发放入对应的 Queue 消息队列。

Exchange 有 4 中路由分发规则:direct、fanout、topic 以及 headers。其分发规则都是基于 Routing Key 与 Binding Key 实现的。当生产者向 RabbitMQ 发送一条消息时,必须指定相应的 Routing Key,消息携带该 Key 到达 RabbitMQ 之后,Exchange 根据指定的路由规则对 Routing Key 进行解析并与绑定的 Queue 的 Binding Key 相比较,然后将消息分发到对应的 Queue 当中。

下面分别介绍一下 Exchange 的四种分发规则。

direct

direct 规则为精确匹配,即当消息携带的 Routing Key 与 Binding Key 完全相同时,消息才会被分发到对应的 Queue。

direct 模式示例:

创建交换机 My_Direct_Exchange 并设置规则为 direct,创建两个 Queue,与 Exchange 绑定,绑定时设置 Routing Key 分别为 Queue01 和 Queue02

在这里插入图片描述

指定 Routing Key 为 Queue01,发送消息

在这里插入图片描述

进入对应的 My_Direct_Queue01,获取消息

在这里插入图片描述

fanout

fanout 类型为广播类型,即 Exchange 会将接收到的信息分发到全部与之绑定的 Queue。

fanout 模式示例:

创建交换机 My_Fanout_Exchange 并设置规则为 fanout,创建两个 Queue,与 Exchange 绑定,绑定时设置 Routing Key 分别为 Queue01 和 Queue02

在这里插入图片描述

指定 Routing Key 为任意值,发送消息

在这里插入图片描述

查看指定的队列,所有与之绑定的队列均可以收到消息

在这里插入图片描述

topic

topic 类型会根据通配符对 Routing Key 进行匹配,通配符的匹配规则如下:

  • Routing Key 必须为一串字符串,每个单词之间使用.分隔;

  • #表示匹配一个或者多个单词;

  • *表示匹配一个单词;

topic 模式示例:

创建交换机 My_Topic_Exchange 并设置规则为 topic,创建两个 Queue,与 Exchange 绑定,绑定时设置 Routing Key 如下所示:

在这里插入图片描述

分别指定 Routing Key 为test.testTopictest.my.testTopic,发送消息,查看对应的 Queue。可以看到,根据分发规则,Queue01 只收到了一条消息,而 Queue02 则是收到了全部两条消息

在这里插入图片描述

headers

headers 类型在日常工作中并不经常使用,该模式下 Exchange 与 Queue 的绑定不再通过 Routing Key 实现,而是通过 Arguments 进行绑定。

当生产者发送消息时,会在消息的 Headers 中携带相应的属性,若消息携带的属性将 Arguments 全部包含在内,则将消息转发至对应的 Queue。

headers 模式示例:

创建交换机 My_Topic_Exchange 并设置规则为 topic,创建三个 Queue,与 Exchange 绑定,绑定时设置 Arguments 如下所示:

在这里插入图片描述

在发送消息时分别指定 Headers 为x=1以及x=1, y=2,发送消息。查看 Queue,可以发现:Queue01 接收到了两条消息;而 02 以及 03 仅接收到了一条消息,即x=1, y=2的消息。

在这里插入图片描述

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

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

相关文章

社招前端二面react面试题整理

解释 React 中 render() 的目的。 每个React组件强制要求必须有一个 render()。它返回一个 React 元素&#xff0c;是原生 DOM 组件的表示。如果需要渲染多个 HTML 元素&#xff0c;则必须将它们组合在一个封闭标记内&#xff0c;例如 <form>、<group>、<div&g…

什么是数据标注,它的用途是什么?

什么是数据标注&#xff1f; 从本质上讲&#xff0c;数据标注是对计算机视觉或自然语言处理 (NLP)可识别的材料内容进行标记的过程。当我们标记或标注这些类型的数据时&#xff0c;它们变得更容易输入算法或编程以通过 NLP 进行解释。 得益于数据标注&#xff0c;人工智能 (…

【Vue】Vue项目打包上线流程--20221219

Vue项目打包上线流程 我的链接https://blog.csdn.net/m0_46629123/article/details/128371149 1.打包 npm run build 2.准备服务器 1.准备demo文件夹&#xff0c;并CMD输入npm init 2.CMD输入npm i express 3.新建并编辑server.js server.js const express require(…

电动汽车对系统运行的影响(Matlab实现)

目录 0 写在前面 1 插式电动车介绍 2 全系统 PEV 充电需求估算 2.1 旅行模式模型 2.2 能源消耗模型 2.3 电力消耗模型 3 单个 PEV 充电设施需求估算 4 PEV充电站需求估算网络 5 电动汽车对电力系统影响的评估 6 系统模型 6.1 结果 6.2 Matlab代码 0 写在前面 在不久…

论文笔记High-Resolution Image Synthesis with Latent Diffusion Models

普通的扩散模型在像素空间操作&#xff0c;运算复杂度较高。为了保证在低资源下训练扩散模型&#xff0c;并保留扩散模型的质量和灵活性&#xff0c;该论文使用预训练的自编码器得到隐含空间&#xff0c;并在隐含空间中训练扩散模型。另一方面&#xff0c;该论文使用cross-atte…

设计模式原则 - 里氏替换原则

一 背景&#xff1a; 里氏替换原则是针对继承的。介绍前先聊聊继承性的特点 继承优势 提高代码的复用性&#xff08;每个子类有拥有父类的属性和方法&#xff09;提高代码的可扩展性 继承劣势 继承是侵入性的&#xff08;只要继承&#xff0c;就必须拥有父类的属性和方法&…

齐鲁转债上市价格预测

齐鲁转债基本信息转债名称&#xff1a;齐鲁转债&#xff0c;评级&#xff1a;AAA&#xff0c;发行规模&#xff1a;80.0亿元。正股名称&#xff1a;齐鲁银行&#xff0c;今日收盘价&#xff1a;4.28&#xff0c;转股价格&#xff1a;5.87。当前转股价值 转债面值 / 转股价格 *…

endo BCN-PEG4-COOH,endo BCN-四聚乙二醇-羧酸

中文名&#xff1a;endo BCN-四聚乙二醇-羧酸 英文名&#xff1a;endo BCN-PEG4-acid CAS号&#xff1a;1881221-47-1 分子式/分子量&#xff1a;C22H35NO8/441.5 结构式 溶解性&#xff1a;溶于大部分有机溶剂&#xff0c;如&#xff1a;DCM、DMF、DMSO、THF等等&#…

公务员备考(四十) 图推提升

第一章 平面专题总结 一、线总结 1、曲线直线 曲直图形判断原则:有曲则为曲,无曲才为直。阴影图形不讨论曲直性。 曲直规律图形特点:a.纯直线曲线图形;b.简笔画实物图形;c.单区域简单图形;d.内外结构图形 2、平行线(含回旋折线) a.轮廓自带平行线条;b.N字型、Z字…

Vs Code的使用

在上一章中有使用到Vs Code但是没有相关的介绍。 什么是Vs Code&#xff1f; 1、vscode是Microsoft公司在美国的一个项目&#xff1a;一个跨平台的源代码编辑器&#xff0c;用于在Mac OS X&#xff0c;Windows和Linux上运行的现代Web和云应用程序。通俗地说&#xff0c;是一款…

MapReduce案列-数据去重

文章目录一&#xff0c;案例分析&#xff08;一&#xff09;数据去重介绍&#xff08;二&#xff09;案例需求二&#xff0c;案例实施&#xff08;一&#xff09;准备数据文件&#xff08;1&#xff09;启动hadoop服务&#xff08;2&#xff09;在虚拟机上创建文本文件&#xf…

最新前端面试总结

介绍 plugin 插件系统是 Webpack 成功的一个关键性因素。在编译的整个生命周期中&#xff0c;Webpack 会触发许多事件钩子&#xff0c;Plugin 可以监听这些事件&#xff0c;根据需求在相应的时间点对打包内容进行定向的修改。 一个最简单的 plugin 是这样的: class Plugin{// …

自动驾驶CarSim和Simulink联合仿真的完美攻略!

作者 | 车路慢慢 仿真秀科普作者 导读&#xff1a;大家好&#xff0c;我叫李慢慢&#xff0c;仿真秀专栏作者&#xff0c;某汽车主机厂汽车仿真工程师&#xff0c;正在筹备转岗。自2020年起&#xff0c;我就在仿真秀App分享ANSA教程和攻略,并学习自动驾驶仿真。 中汽院智能网…

如何通过手机APP在线监控西门子PLC的运行状态

随着工业生产、制造环节的不断神话&#xff0c;工业设备越来越精细复杂&#xff0c;借助PLC实现的自动化控制技术被广泛的应用于工业领域中&#xff0c;具备丰富的应用场景。在物联网和无线通信技术的发展下&#xff0c;越来越多的工业企业系统通过手机APP监控现场PLC的运行状态…

《计算机视觉技术与应用》重点复盘

系列文章目录 《计算机视觉技术与应用》-----第二章 图像处理基础 《计算机视觉技术与应用》-----第三章 图形用户界面 《计算机视觉技术与应用》-----第四章 图像变换 《计算机视觉技术与应用》-----第五章 边缘和轮廓 《计算机视觉技术与应用》-----第六章 边缘和轮廓 …

使用Win32 API 渲染一个标准界面元素

有这么一个Win32 API&#xff0c;名叫 DrawFrameControl&#xff0c;它可以用来在你的自定义控件上渲染一些标准的窗口元素。 下面我们举一个简单的例子来说明。 在下面的例子中&#xff0c;我们会使用这个 API 函数来绘制一个已选择的单选按钮。具体方法是&#xff0c;在我们…

常见面试题(随机)

常问的几个方面 1.MySQL 存储引擎、事务、锁、索引 2.Redis 数据类型、过期策略、淘汰策略、缓存穿透、缓存击穿、缓存雪崩、分布式锁 3. Spring Spring Ioc、Spring AOP、Spring MVC MYSQL 存储引擎 事务 事务的特性 原子性、一致性、隔离性、持久性事务的隔离性并发异常:…

Stm32标准库函数2——多通道ADC DMA

#include "stm32f10x.h" //在该头文件中默认定义系统时钟为72M #include "delay.h" #include "sys.h" #include "usart.h" #include "adc.h" #include "DMA.h" //串口&#xff1a;A9 A10&#xff0c;波特率11…

linux-12月第四周-磁盘存储和文件系统

文章目录管理存储使用磁盘空间过程为什么要磁盘分区划分分区的方式MBR管理存储 使用磁盘空间过程 买来一块新硬盘后&#xff0c;有以下三个使用步骤 第一步&#xff1a;划分分区&#xff08;将硬盘划分为若干个分区&#xff0c;windows上的C盘&#xff0c;D盘&#xff0c;E盘…

SCUT01在线协作白板技术解决方案

在七牛云校园黑客马拉松中&#xff0c;来自华南理工大学的SCUT01团队&#xff0c;为我们带来了UI精美、体验优秀的白板作品&#xff0c;在大赛中获得二等奖的好成绩。以下是这款在线协作白板的技术解决方案。 背景 疫情背景下&#xff0c;线上课堂、线上会议等业务背景下都有着…