RabbitMQ的基本介绍

RabbitMQ的基本介绍

基于AMQP协议,Erlang语言开发,是部署最广泛的开源消息中间件,是最受欢迎的开源消息中间件之一。

image-20220526105845673

AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。高级消息队列协议使得遵从该规范的客户端应用和消息中间件服务器的全功能互操作成为可能。

核心概念

image-20220526111037197

生产者 Producer

产生数据发送消息的程序是生产者。

消费者 Consumer

消费与接收具有相似的含义。消费者大多时候是一个等待接收消息的程序。注意生产者、消费者、消息中间件很多时候并不在同一机器上,同一个应用程序既可以是生产者又是可以是消费者。

连接 Connection

生产者和消费者与Broker之间的Tcp连接。

通道 Channel

如果每一次访问 RabbitMQ 都建立一个 Connection,在消息量大的时候建立 TCP Connection 的开销将是巨大的,效率也较低。Channel 是在 Connection 内部建立的逻辑连接,如果应用程序支持多线程,通常每个 Thread 创建单独的 Channel 进行通讯,AMQP Method 包含了 Channel id 帮助客户端和 Message Broker 识别 Channel,所以 Channel 之间是完全隔离的。Channel 作为轻量级的 Connection 极大减少了操作系统建立 TCP Connection 的开销。

消息代理 Broker

接收和分发消息的应用,一个RabbitMQ Server 就是一个 Message Broker。

虚拟主机 Virtual Host

出于多租户和安全因素设计的,把 AMQP 的基本组件划分到一个虚拟的分组中,类似于网络中的 Namespace 概念。当多个不同的用户使用同一个 RabbitMQ Server 提供的服务时,可以划分出多个 Virtual Host,每个用户在自己的 Virtual Host 创建 Exchange、Queue 等。

交换机 Exchange

交换机是 RabbitMQ 非常重要的一个部件,一方面它接收来自生产者的消息,另一方面它将消息推送到队列中。交换机必须确切知道如何处理它接收到的消息,是将这些消息推送到特定队列还是推送到多个队列,亦或者是把消息丢弃,这个得有交换机类型决定。

Message 到达 Broker 的第一站,根据分发规则,匹配查询表中的 Routing Key,分发消息到 Queue 中去。常用的类型有:Directpoint-to-point、 Topicpublish-subscribe 和 Fanoutmulticast

队列 Queue

队列是 RabbitMQ 内部使用的一种数据结构,尽管消息流经 RabbitMQ 和应用程序,但它们只能存储在队列中。队列仅受主机的内存和磁盘限制的约束,本质上是一个大的消息缓冲区。许多生产者可以将消息发送到一个队列,许多消费者可以尝试从一个队列接收数据。这就是我们使用队列的方式。

消息最终被送到这里等待 Consumer 取走。

Binding

Exchange和Queue之间的虚拟连接,Binding 中可以包含 Routing Key,Binding 信息被保存到 Exchange 中的查询表中,用于 Message 的分发依据。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL之undo日志

聊聊undo log 什么是undo log undo log(回滚事务),在事务没有提交前,MySQL将记录更新操作的反向操作到undo log日志中,以便进行回退保证事务的原子性 undo log的作用 1.提供回滚操作 我们在进行数据更新操作的时候…

肖sir__搭建环境报错:com.alibaba.druid:type=DruidDataSourceStat异常

报错现象: 解决方案: 同一个服务器配置多个tomcat,而这些tomcat里边的项目配置的数据库连接池都是用alibaba.druid。下面说下我的解决过程,首先,修改tomcat bin目录下的catalina.sh,添加如下代码: 代码如…

Flink(八)【窗口】

前言 终于忙完了四门专业课的期末,确实挺累啊。今天开始继续学习 Flink ,接着上次的内容。 今日摘录: 他觉得一个人奋斗更轻松自在。跟没有干劲的人在一起厮混,只会徒增压力。 -《解忧杂货店》 1、窗口 之前我们已经了解了…

HyperBDR云容灾v4.10.1发布,划重点:支持UCloud云平台自动化容灾+新增可灵活定义的备份策略

版本更新 HyperBDR云容灾v4.10.1版本来啦! 此次更新为大家带来了多个新功能,下面让我们来看看具体是哪些吧~ 01 策略管理新功能: 多时间段限速功能: 更加灵活的多个时间段限速选择,可以在创建策略时为不同的时间段设…

Zoho CRM:高效捕捉线索,精准管理客户

线索管理是销售过程中的重要环节,它可以获取潜在客户信息,有效的管理和转化,提高企业销售业绩。如今,Zoho CRM管理系统广泛应用于更多的企业,他们使用CRM系统进行线索管理,用以提高线索转化率。下面就来说说…

VsCode中使用功能vite创建vue3+js项目报错

VsCode中使用功能vite创建vue3js项目报错 VsCode中使用功能vite创建vue3js项目import模块报错如下处理方法 VsCode中使用功能vite创建vue3js项目import模块报错如下 处理方法 在项目根目录新建jsconfig.json {"compilerOptions": {"baseUrl": "./&q…

YOLOv7独家原创改进:自研独家创新FT_Conv,卷积高效结合傅里叶变换

💡💡💡本文自研创新改进:卷积如何有效地和频域结合,引入分数阶傅里叶变换和分数阶Gabor变换,最终创新到YOLOv7。 推荐指数:五星 在道路缺陷检测任务中,原始map为0.8,FT_Conv为0.82 收录YOLOv7原创自研 https://blog.csdn.net/m0_63774211/category_12511937.htm…

虚拟机指定开放数据库3306端口

1、查看当前防火墙状态: sudo firewall-cmd --state 2、开放指定端口 sudo firewall-cmd --zonepublic --add-port3306/tcp --permanent 3、重新加载防火墙配置 sudo firewall-cmd --reload 4、检查端口是否开放成功 sudo firewall-cmd --zonepublic --list-por…

macbook电脑运行缓慢和卡顿内存怎么清理了?

假如你还在为“你的系统内存不足”的提示所困扰,或者你的Mac电脑突然运行缓慢和卡顿,那么你一般需要认真了解一下macbook内存怎么清理了? MacBook是功能强大的电脑,这点毫无疑问,但是它仍旧会随着时间推移变得运行缓慢。值得庆幸…

6.16二叉搜索树中的搜索(LC700-E)

算法: 二叉搜索树自带顺序,所以不用强调前、中、后序。 调试过程: 原因:初始化变量result时,没有给result赋值 正确代码: /*** Definition for a binary tree node.* public class TreeNode {* int…

Typora .MD笔记中本地图片批量上传到csdn (.PNG格式)(无需其他任何图床软件)

Typora .MD笔记中本地图片批量上传到csdn (.PNG格式)(无需其他任何图床软件) 截图软件推荐 qq 截图 快捷键 ctrlshiftA. 步骤一 设置Typora 的图片 点击文件. 点击偏好设置 ->图像 我们可以选择将图片复制到我们的文件夹中。 建议刚写好文件标题就…

Linux系统安装-以文本模式安装rhel8

文本模式安装提供了用于安装 Red Hat Enterprise Linux 的交互式非图形界面。此安装方法对于没有图形功能的系统很有用。但是,在开始基于文本的安装之前,请务必考虑可用的替代方案。文本模式在安装过程中可以做出的选择数量有限。 目录 交互式文本模式安…

数据结构树与二叉树(5)Huffman树

#include <iostream> #include <stack> #include <queue>using namespace std;struct Node {char name ;int code[200];int num 0;//code的下标int weight 0;//权重&#xff08;次数&#xff09;Node* lchild;//左孩子Node* rchild;//右孩子Node* parent;N…

switch....case击穿| return 和break的区别

1、我们首先要明白switch..case的语法使用&#xff1a; 执行流程&#xff1a;首先计算switch后面圆括号中表达式的值&#xff0c;然后用此值依次与各个case的常量表达式比较,若圆括号中表达式的值与某个case后面的常量表达式的值相等,就执行此case后面的语句,执行后遇break语句…

牛客剑指offer刷题模拟篇

文章目录 顺时针打印矩阵题目思路代码实现 顺时针打印矩阵 题目 描述 输入一个矩阵&#xff0c;按照从外向里以顺时针的顺序依次打印出每一个数字&#xff0c;例如&#xff0c;如果输入如下4 X 4矩阵&#xff1a; [[1,2,3,4], [5,6,7,8], [9,10,11,12], [13,14,15,16]] 则依次…

MGF4964BL-01 低噪声 InGaAs HEMT(高电子迁移率晶体管) K波段放大器 微X型塑料封装

MGF4964BL-01超低噪声 InGaAs HEMT(高电子迁移率晶体管)设计用于K波段放大器。MGF4964BL-01是符合 RoHS 标准的产品&#xff0c;通过无铅认证。 MGF4964BL-01特征&#xff1a; f20GHz NFmin 时的低噪声系数。0.65 分贝(典型值) f20GHz 时的高相关增益 Gs 13.5dB(典型值。) MG…

C#文件流二进制文件的读写

目录 一、BinaryWriter类 二、BinaryReader类 三、示例 1.源码 2.生成效果 二进制文件的写入与读取主要是通过BinaryWriter类和BinaryReader类来实现的。 一、BinaryWriter类 BinaryWriter类以二进制形式将基元类型写入流&#xff0c;并支持用特定的编码写入字符串&#…

【开源】基于JAVA的高校学生管理系统

项目编号&#xff1a; S 029 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S029&#xff0c;文末获取源码。} 项目编号&#xff1a;S029&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学生管理模块2.2 学院课程模块2.3 学…

记录仿钉钉审批流(将MySQL换成Oracle)走过的坑

需求&#xff1a;实现审批流程 在Gitee上发现了一个功能还OK的项目&#xff0c;于是就clone下来了&#xff08;如下图&#xff09; 原项目用MySQL很好启动&#xff0c;B站上作者还录制了视频&#xff0c;可以去学习 这里主要记录将MySQL换成Oracle出现的问题 首先&#xff0c…

用java实现拼图小游戏

1、了解拼图游戏基本功能&#xff1a; 拼图游戏内容由若干小图像块组成的&#xff0c;通过鼠标点击图像块上下左右移动&#xff0c;完成图像的拼凑。 2、拼图游戏交互界面设计与开发&#xff1a; 通过创建窗体类、菜单、中间面板和左右面板完成设计拼图的交互界面 &#xff…
最新文章