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

RabbitMQ知识总结(基本概念)

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

在这里插入图片描述

基本概念

在这里插入图片描述

Producer:

消息的生产者,是一个向交换机发布消息的客户端应用程序。

Connection:

生产者/消费者和 RabbitMQ 服务器之间建立的 TCP 连接。

Channel:

TCP 里面的虚拟连接。

  • Connection 相当于电缆,Channel 相当于独立光纤束,一条 TCP 连接中可以创建多条信道,增加连接效率。
  • 无论是发布消息、接收消息、订阅队列都是通过信道完成的。

为什么使用信道而不直接使用 TCP 连接通信?

  • TCP 连接的创建和销毁开销特别大,创建需要 3 次握手,销毁需要 4 次挥手。
  • 高峰时每秒成千上万条 TCP 连接的创建会造成资源巨大的浪费。
  • 而且操作系统每秒处理 TCP 连接数也是有限制的,会造成性能瓶颈。
  • 而如果一条线程使用一条信道,一条 TCP 链接可以容纳无限的信道,即使每秒成千上万的请求也不会成为性能的瓶颈。

Broker:

消息队列服务器实体,即 RabbitMQ 服务器。

Virtual Host:

虚拟主机,每个 Virtual Host 本质上就是一个 mini 版的 RabbitMQ 服务器,拥有自己的队列、交换机、绑定和权限机制。

当多个不同的用户使用同一个 RabbitMQ 服务器时,可以划分出多个虚拟主机。

  • RabbitMQ 默认的虚拟主机路径是 /

Exchange:

交换机,用来接收生产者发送的消息,并根据分发规则,将这些消息分发给服务器中的队列中。

不同的交换机有不同的分发规则

交换机类型有4种:

  • direct(直连):

    • 它会把消息路由到那些 BindingKey RoutingKey完全匹配的队列中。
  • fanout(扇形):

    • 它会把所有发送到该交换器的消息路由到所有与该交换器绑定的队列中。
  • topic(主题):

    • 将消息路由到 BindingKey RoutingKey 相匹配的队列中。
  • headers(标题):

    • 交换器不依赖于路由键的匹配规则来路由消息,而是根据发送的消息内容中 headers 属性进行匹配。

直连交换机(dirext exchange)为 RabbitMQ 默认的交换机。

Queue:

消息队列,用来保存消息直到发送给消费者。

它是消息的容器,也是消息的终点,消息一直在队列里面,等待消费者链接到这个队列将其取走。

Binding:

消息队列和交换机之间的虚拟连接,绑定中包含路由规则,绑定信息保存到交换机的路由表中,作为消息的分发依据。

Consumer:

消息的消费者,表示一个从消息队列中取得消息的客户端应用程序。

死信队列

在这里插入图片描述

当消息在队列中由于某些原因没有被及时消费而变成死信(Dead Message)后,消息中间件可以将其从当前队列发送到另一个队列中,这个队列就是死信队列。

在 RabbitMQ 中,由于有交换机的概念,实际是将死信发送给了死信交换机(Dead Letter Exchange,简称DLX)。

死信交换机 和 死信队列与普通的没有区别。

  • 死信队列只是一种特殊的队列,里面的消息仍然可以消费。

消息成为死信的情况:

  • 队列消息长度到达限制

  • 消费者拒签消息,并且不把消息重新放入原队列

  • 消息到达存活时间未被消费

延迟队列

延迟队列,即消息进入队列后不会立即被消费,只有到达指定时间后,才会被消费。

但 RabbitMQ 中并未提供延迟队列功能,可以使用死信队列实现延迟队列的效果。

  • 延迟队列:TTL + 死信队列的合体。
http://www.lryc.cn/news/412390.html

相关文章:

  • Prel语言入门学习:一篇全面的指南
  • 在云服务器上自动化部署项目,jenkins和gitee
  • python 参数输入
  • Spring面试篇章——Spring基本概述
  • 股票预测模型中注意力多层Attention RNN LSTM 的应用
  • C语言 | Leetcode C语言题解之第313题超级丑数
  • PHP健身微信小程序系统源码
  • 树组件 el-tree 数据回显
  • 54、PHP 实现希尔排序
  • linux 虚拟机解压arm-linux-gcc-4.6.4-arm-x86_64.tar.bz2并arm-linux-gcc
  • 泛化的最近点迭代法(Generalized-ICP)
  • Java | Leetcode Java题解之第313题超级丑数
  • 单细胞数据整合-去除批次效应harmony和CCA (学习)
  • MuRF代码阅读
  • pycharm无法导入pyside2模块;“ModuleNotFoundError: No module named ‘PySide2“
  • c语言指针中“数组名的理解”以及“一维数组传参”的本质
  • 计算机毕业设计Python+Flask微博舆情分析 微博情感分析 微博爬虫 微博大数据 舆情监控系统 大数据毕业设计 NLP文本分类 机器学习 深度学习 AI
  • KubeBlocks v0.9 解读|最高可管理 10K 实例的 InstanceSet 是什么?
  • ZW3D二次开发_菜单_禁用/启用表单按钮
  • windows子系统wsl完成本地化设置locale,LC_ALL
  • MYSQL 根据条件order by 动态排序
  • DirectX修复工具下载安装指南:电脑dll修复拿下!6种dll缺失修复方法!
  • vue3(1)虚拟数字键盘的封装,(2)以及子组件改变父组件变量的值进而使子组件实时响应值的变化,(3)子组件调用父组件中的方法(带参)
  • 反序列化靶机serial
  • 扎克伯格说Meta训练Llama 4所需的计算能力是Llama 3的10倍
  • CTFHUB-文件上传-双写绕过
  • RabbitMQ docker部署,并启用MQTT协议
  • Python面试宝典第25题:括号生成
  • 计算机毕业设计选题推荐-社区停车信息管理系统-Java/Python项目实战
  • Python面试整理-自动化运维