当前位置: 首页 > news >正文

RabbitMQ的核心概念

RabbitMQ是一个消息中间件,也是一个生产者消费者模型,负责接收,存储和转发消息。

核心概念

Producer

生产者,是RabbitMQ Server的客户端,向RabbitMQ发送消息

Consumer

消费者,是RabbitMQ Server的客户端,从RabbitMQ接收消息

Broker

代表RabbitMQ Server,负责接收和转发消息

对于RabbitMQ来说,⼀个RabbitMQ Broker可以简单地看作⼀个RabbitMQ服务节点,或者 RabbitMQ服务实例.⼤多数情况下也可以将⼀个RabbitMQ Broker看作⼀台RabbitMQ服务器。

Connection

连接,是客⼾端和RabbitMQ服务器之间的⼀个TCP连接.这个连接是建⽴消息传递的基 础,它负责传输客⼾端和服务器之间的所有数据和控制信息。

Channel

通道,信道.Channel是在Connection之上的⼀个抽象层.在RabbitMQ中,⼀个TCP连接可以 有多个Channel,每个Channel都是独⽴的虚拟连接.消息的发送和接收都是基于Channel的.

通道的主要作⽤是将消息的读写操作复⽤到同⼀个TCP连接上,这样可以减少建⽴和关闭连接的开销,提⾼性能.

Virtual host

虚拟(主)机.这是⼀个虚拟概念.它为消息队列提供了⼀种逻辑上的隔离机制.对于 RabbitMQ⽽⾔,⼀个Broker Server上可以存在多个Virtual Host.当多个不同的⽤⼾使⽤同⼀个 RabbitMQ Server提供的服务时,可以虚拟划分出多个vhost,每个⽤⼾在⾃⼰的vhost创建 exchange/queue等

类似于mysql上的database,是一个逻辑上的集合,一个mysql服务器可以有多个database.

Queue

队列,是RabbitMQ的内部对象,用来存储消息.

队列和消费者的关系是多对多的,一个队列可以有多个消费者订阅,一个消费者也可以订阅多个队列.

Exchange

交换机,是消息到达broker的第一站,它负责接收生产者发送的消息,并且根据特定的规则来将消息路由到一个或多个队列当中.

工作流程

AMQP

AMQP(Advanced Message Queuing Protocol)是⼀种⾼级消息队列协议,AMQP定义了⼀套确定的 消息交换功能,包括交换器(Exchange),队列(Queue)等.这些组件共同⼯作,使得⽣产者能够将消息发 送到交换器.然后由队列接收并等待消费者接收.AMQP还定义了⼀个⽹络协议,允许客⼾端应⽤通过该协议与消息代理和AMQP模型进⾏交互通信

RabbitMQ是遵从AMQP协议的,换句话说,RabbitMQ就是AMQP协议的Erlang的实现(当然RabbitMQ还 ⽀持STOMP2,MQTT2等协议).AMQP的模型结构和RabbitMQ的模型结构是⼀样的.

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 《九歌· 程序员》
  • 【stm32项目】多功能智能家居室内灯光控制系统设计与实现(完整工程资料源码)
  • kafka运维常用命令
  • 存储实验:华为异构存储在线接管与在线数据迁移(Smart Virtualization Smart Migration 特性)
  • C++ //练习 17.12 使用前一题中的数据结构,编写一个函数,它接受一个问题编号和一个表示真/假解答的值,函数根据这两个参数更新测验的解答。
  • 【轻松拿捏】什么是多态?如何在 Java 中实现多态?
  • 30. 串联所有单词的子串【 力扣(LeetCode) 】
  • 暑假算法刷题日记 Day 10
  • 记录jenkins的一个错误
  • 微信小程序request的请求格式是什么
  • 搭建内网开发环境(一)|基于docker快速部署开发环境
  • ES高级查询Query DSL查询详解、term术语级别查询、全文检索、highlight高亮
  • 学习日志8.14--ALC(Access Control List)访问控制列表
  • 一分钟学会Linux交换分区
  • 【Python深度学习】图像分割经典网络:U-Net
  • __proto__ 和 prototype的关系
  • ES6 学习笔记(一)let,const和解构赋值
  • java8 Stream Pipelines 浅析
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 排序(1):冒泡排序
  • 前端相关框架总和
  • 实现简单的正则表达式引擎
  • 我的zsh配置, 2019最新方案
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 一个SAP顾问在美国的这些年
  • 一个项目push到多个远程Git仓库
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • 组复制官方翻译九、Group Replication Technical Details
  • ​linux启动进程的方式
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • #Datawhale AI夏令营第4期#AIGC方向 文生图 Task2
  • #宝哥教你#查看jquery绑定的事件函数
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • $(this) 和 this 关键字在 jQuery 中有何不同?
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (zt)最盛行的警世狂言(爆笑)
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (译) 函数式 JS #1:简介
  • (转)大型网站架构演变和知识体系
  • 、写入Shellcode到注册表上线
  • .cn根服务器被攻击之后
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .net framework4与其client profile版本的区别
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .NET 读取 JSON格式的数据
  • .Net 中Partitioner static与dynamic的性能对比
  • .NET学习全景图
  • .Net中ListT 泛型转成DataTable、DataSet
  • .Net中wcf服务生成及调用
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • .vue文件怎么使用_我在项目中是这样配置Vue的