【面试题】简述rabbitmq的组织架构

news/2024/12/15 9:05:06/

@[面试题]简述rabbitmq的组织架构

RabbitMQ 是一种流行的消息中间件,其架构设计围绕消息生产者, 消息消费者和消息中转(Broker)展开。以下是 RabbitMQ 的主要组织架构组件和它们之间的关系:

1. 核心组件

1.1 Producer(生产者)

生产者是消息的发送方,负责将消息发送到 RabbitMQ 的交换器(Exchange)。
通常是应用程序的一部分,使用 RabbitMQ 客户端库与消息队列通信。
可以指定消息的 路由键(Routing Key),用于决定消息的投递方式。

1.2 Consumer(消费者)

消费者是消息的接收方,负责从队列中读取并处理消息。
通常也通过 RabbitMQ 客户端库连接到 RabbitMQ。
消费者可以:
主动拉取消息(pull 模式)。
被动接收消息(push 模式)。

1.3 Broker(消息代理)

RabbitMQ 本身作为消息代理,用于管理和中转消息。
Broker 负责存储消息并根据路由规则将消息分发到正确的队列。

1.4 Queue(队列)

队列是消息的最终存储位置,消费者从队列中获取消息。
队列的特点:
FIFO(先进先出)。
消息在被消费之前会一直保存在队列中。
一个队列可以被多个消费者监听,RabbitMQ 会以轮询的方式将消息分发给消费者。

1.5 Exchange(交换器) 很重要!!

交换器是连接生产者和队列的中间组件,负责根据路由规则将消息发送到一个或多个队列。
交换器的类型:
Direct Exchange:基于路由键的精确匹配。
Fanout Exchange:广播模式,消息会发送到所有绑定的队列。
Topic Exchange:支持基于通配符的路由匹配。
Headers Exchange:基于消息头属性进行路由(较少使用)。

1.6 Binding(绑定)

绑定是交换器与队列之间的关系,用于定义路由规则。
生产者通过指定路由键,将消息发送到符合绑定规则的队列。

1.7 Virtual Host(虚拟主机)

虚拟主机是 RabbitMQ 的逻辑分区,用于隔离不同的应用程序或用户。
每个虚拟主机包含一组交换器、队列和绑定。
默认虚拟主机是 /。

1.8 Connection(连接)与 Channel(信道)

连接:客户端与 RabbitMQ Broker 之间的网络连接(通常是 TCP)。
信道(Channel):
信道是建立在连接之上的虚拟连接。
一个连接可以有多个信道,信道用于发送和接收消息。
信道的设计提高了性能,避免为每个操作都建立新连接。

2. 架构

RabbitMQ 的架构可以用以下关系表示:

Producer → Exchange → Queue → Consumer
生产者发送消息到交换器。
交换器根据绑定规则决定消息应该路由到哪个队列。
消费者从队列中消费消息。

3. 其他重要概念

3.1 Acknowledgment(消息确认)

消费者处理消息后向 RabbitMQ 确认。
未确认的消息会被重新投递。

3.2 Durable(持久化)

持久化队列和消息可以在 RabbitMQ 重启后保留。

3.3 Prefetch Count

用于限制消费者一次性获取的未确认消息数量,防止消息堆积。

3.4 Dead Letter Queue(死信队列)

如果消息被拒绝或过期,可以被转发到死信队列进行进一步处理。

3.5 Cluster(集群)

RabbitMQ 支持集群部署,多个节点协同工作以实现高可用性和扩展性。

总结

RabbitMQ 的组织架构围绕生产者、交换器、队列和消费者构建。它通过灵活的路由机制、虚拟主机隔离和多信道通信等特性,为消息传递提供了高效、可靠和可扩展的解决方案。这种架构设计使 RabbitMQ 能够适应各种复杂的消息传递需求。

rabbitmq_68">rabbitmq基于什么传输?

RabbitMQ 基于 AMQP(Advanced Message Queuing Protocol) 进行消息的传输和通信。以下是有关 RabbitMQ 传输机制的详细介绍:

1. AMQP 协议

全称:高级消息队列协议(Advanced Message Queuing Protocol)。
特点:
是一种应用层协议,专为消息中间件设计。
提供可靠、灵活的消息传递机制,支持消息的路由、队列管理、确认等功能。
跨语言、跨平台的开放标准,适用于多种消息系统。

2. 底层传输

RabbitMQ 使用 TCP/IP 作为底层网络通信协议,并通过以下机制实现高效和可靠的消息传输:

(1) 消息传递方式
发布-订阅模型:生产者发布消息到交换器,消费者从绑定的队列中订阅消息。
消息确认(Acknowledgment):确保消息被可靠消费,防止丢失。
(2) 传输加密
支持 TLS/SSL,用于对网络传输中的数据进行加密,确保安全性。
(3) 高效的二进制帧协议
RabbitMQ 使用 AMQP 的二进制帧结构进行通信。
帧分为不同类型(如方法帧、头部帧、消息体帧),实现高效的数据传输和解析。

3. 协议栈层次

AMQP 协议栈分为以下几个层次:

  1. 网络层
    基于 TCP/IP,确保稳定的网络通信。
  2. 传输层
    定义了帧的传输格式,如连接、通道管理、心跳机制等。
  3. 会话层
    包含消息的确认机制(ACK/NACK)、队列绑定、路由规则等。
  4. 应用层
    定义了队列、交换器、绑定、消息属性等高级功能。
  5. 扩展协议支持
    除了 AMQP,RabbitMQ 还支持其他协议,便于与多种系统集成:

MQTT:用于 IoT(物联网)场景的轻量级传输协议。
STOMP:简单文本导向的消息协议,适合 WebSocket。
HTTP/HTTPS:通过插件支持 RESTful API 调用。

4. 通信可靠性

RabbitMQ 在传输中使用多种机制确保消息的可靠性:

消息持久化:将消息存储在磁盘上,防止服务重启或崩溃导致消息丢失。
消息确认:消费者通过 ACK 确认消息已被成功处理。
死信队列:未被消费或处理失败的消息可以转移到死信队列进行后续处理。
流量控制:通过设置队列的最大长度、TTL 等限制消息过载。

总结

RabbitMQ 基于 TCP/IP 和 AMQP 进行消息传输,提供可靠、高效的消息传递服务。同时,通过 TLS 加密、消息确认等机制,确保传输过程中的安全性和可靠性。


http://www.ppmy.cn/news/1555249.html

相关文章

【stable diffusion部署】Stable Diffusion开源本地化的文生图图生图AI

前言 主要功能 文生图、图生图、图像修复、处理、合成 所有的AI设计工具,安装包、模型和插件,都已经整理好了,👇获取~ 系统要求 windows 10、11系统,建议6G显存,NVIDIA显卡推荐12G显存,内存建…

Azure OpenAI 生成式人工智能白皮书

简介 生成式 AI 成为人工智能领域新的关键词。吸纳从机器智能到机器学习、深度学习的关键技术生成式 AI更进一步,能够根据提示或现有数据创建新的书面、视觉和听觉内容。在此基础上大模型和大模型应用一时涌现,并迅速确立AI落地新范式。据 data.ai inte…

AI绘画探索:通过Stable Diffusion实现角色稳定控制与线稿上色

在角色控制方面,我们都了解到midjourney的局限性,其无法稳定地实现目标控制。然而,Stable Diffusion 提供了出色的可控性,使我们能够有效地弥补这一缺陷。 今天就通过一个简单案例,给大分享如何使用 Stable Diffusion…

MySQL-逻辑架构篇

服务器处理客户端请求 首先MySQL是典型的C/S架构,即Clinet/Server 架构,服务端程序使用的mysqld。 不论客户端进程和服务器进程是采用哪种方式进行通信,最后实现的效果是:客户端进程向服务器进程发送一段文本(SQL语句…

【069】基于51单片机WIFI智能家居【Proteus仿真+Keil程序+报告+原理图】

☆、设计硬件组成:51单片机最小系统WIFI模块DHT11温湿度传感器AT24C02存储芯片LCD1602液晶显示继电器按键电路蜂鸣器LED灯。 1、本设计采用STC89C51/52、AT89C51/52、AT89S51/52单片机作为主控芯片,ESP8266实现WIFI远程数据传输,随时随地在外…

Linux shell的七大功能---输入输出重定向 << >> < >

1、输出定向符 >(覆盖) 命令>文件 以覆盖的形式,将命令正确的输出结果写入进文件 例:“who命令”将当前的Linux服务器系统使用者等信息显示出来 (使用“ Ctrl Alt F mun ”切换到命令行界面&#xff0…

[Oracle]拼接路径——LISTAGG和KEEP的用法

需求: 将以下路径明细 ROUTE_IDORIGINTARGETORDER1AB11BC21CD32AB12BE2 拼接成 ROUTE_IDROUTE1A->B->C->D2A->B->E 效果 分析: 每条路径明细中包含了起点和终点,我们拼接时只需要取每次的起点使用->连接在一起&…

libevent编译(cmake)及测试

前言 一个跨平台网络库 只所以写个,为了以后忘了,这里作为备份吧,都搭好多次了,换个机子搭一次 1:环境 分别在 ubuntu22 与 win10上编译下 libevent(2.1.12) download:https://libevent.org/ openssl(3.4.0) https://…