RabbitMQ系列(一)架构解析

RabbitMQ 架构解析

RabbitMQ 是一个基于 AMQP 协议的开源消息中间件,其核心架构通过多组件协作实现高效、可靠的消息传递。以下是其核心组件与协作流程的详细说明:


一、核心组件与功能
  1. Broker(消息代理服务器)
    • RabbitMQ 服务端核心,负责接收、存储和转发消息,可单机或集群部署。
    • 包含虚拟主机(Virtual Host)、交换机(Exchange)、队列(Queue)等逻辑单元。
  2. Virtual Host(虚拟主机)
    • 作用:逻辑隔离资源,每个 Virtual Host 拥有独立的交换机、队列和权限。
    • 类比:类似数据库中的“库”,默认使用 / 作为根虚拟主机。
  3. Producer/Publisher(生产者)
    • 消息发送方,把消息发送给Exchange,然后通过 Exchange 将消息路由到队列。消息包含 Routing Key(路由键)和 Headers(头信息)。
  4. Exchange(交换机)
    • 功能:接收生产者消息,按类型规则转发到队列。
    • 类型
      • Direct:精确匹配 Routing Key 与 Binding Key。
      • Fanout:广播到所有绑定队列。
      • Topic:通配符匹配Routing Key。
      • Headers:基于消息头键值对匹配(很少使用)。
  5. Queue(队列)
    • 存储消息的容器,消费者从中获取消息。存储方式分为支持持久化(存储到磁盘)和非持久化(内存存储)两种。
  6. Binding(绑定关系)
    • 定义 Exchange 与 Queue 的连接规则,Binding Key(绑定键)用于匹配路由逻辑。
  7. Consumer(消费者)
    • 就是消息的使用者。订阅队列并处理消息,支持手动确认(ACK)或自动确认两种方式。
  8. Connection & Channel(连接与信道)
    • Connection:TCP 长连接,客户端与 Broker 的通信基础。
    • Channel:复用 Connection 的逻辑通道,轻量级且支持多线程。

二、消息流转流程
  1. 生产者发送消息:Publisher 通过 Channel 将消息发送到 Exchange,并指定Routing Key。
  2. 交换机路由:Exchange 根据类型和 Binding 规则,将消息转发到匹配的队列。
  3. 队列存储:消息暂存于队列,等待消费者拉取。
  4. 消费者处理:Consumer 从队列获取消息,处理后发送 ACK 确认。


三、架构特点与优势
  1. 解耦与异步:生产者与消费者无需直接通信,提升系统扩展性。
  2. 灵活路由:通过多种 Exchange 类型支持复杂消息分发场景。
  3. 高可用性:支持集群部署与镜像队列,避免单点故障。
  4. 资源隔离:Virtual Host 实现多租户环境隔离,避免资源冲突。

四、典型应用场景
场景适用组件或模式
订单异步处理Direct Exchange + ACK 机制
日志广播Fanout Exchange
多维度事件通知Topic Exchange
多团队环境隔离Virtual Host + 权限控制

五、引用扩展
  • 部署优化:可通过集群镜像模式或 Kubernetes 部署提升可靠性。
  • 性能调优:调整 Channel 并发数、消息持久化策略等

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

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

相关文章

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_list_init

ngx_list_init 定义在 src\core\ngx_list.h static ngx_inline ngx_int_t ngx_list_init(ngx_list_t *list, ngx_pool_t *pool, ngx_uint_t n, size_t size) {list->part.elts ngx_palloc(pool, n * size);if (list->part.elts NULL) {return NGX_ERROR;}list->par…

Linux切换Python版本

1、更新apt sudo apt update2、查询python安装路径 which python 或者which python33、查询安装版本 # 查看所有以 "python" 开头的命令(包括版本号) ls -l 安装路径* 例如 ls -l /usr/bin/python*4、修改软连接 udo unlink /usr/bin/pyt…

Spring Cloud之注册中心之Nacos的使用

目录 Naacos 服务注册/服务发现 引⼊Spring Cloud Alibaba依赖 引入Nacos依赖 引入Load Balance依赖 配置Nacos地址 服务端调用 启动服务 Naacos Nacos是Spring Cloud Alibaba的组件, Spring Cloud Alibaba遵循Spring Cloud中定义的服务注册, 服务发现规范. 因此使⽤Na…

使用通义万相Wan2.1进行视频生成

使用通义万相Wan2.1进行视频生成 源代码准备运行环境准备创建Python虚拟环境并激活安装依赖包 模型下载生成视频官网的视频生成例子简单描述场景视频生成示例详细描述场景视频生成示例 最近通义万相开源了其视频生成模型。模型有两个版本,一个是1.3B的,一…

鸿蒙HarmonyOS 开发简介

鸿蒙开发入门教程 一、技术简介 鸿蒙操作系统(HarmonyOS)是面向万物互联时代的全场景分布式操作系统,具备分布式软总线、分布式数据管理、分布式任务调度等核心能力,能让设备间实现无缝连接与协同,为用户提供统一、流…

docker和containerd从TLS harbor拉取镜像

私有镜像仓库配置了自签名证书,https访问,好处是不需要处理免费证书和付费证书带来的证书文件变更,证书文件变更后需要重启服务,自签名证书需要将一套客户端证书存放在/etc/docker/cert.d目录下,或者/etc/containerd/c…

linux ununtu通过nginx-1.6.2.tar.gz安装nginx并安装在自定义目录XXX下 的步骤

Ubuntu 下通过源码安装 Nginx 1.6.2 到自定义目录 /home/aot/nginx 的步骤 以下是将 Nginx 1.6.2 源码包离线安装到自定义目录的详细流程,包含依赖管理、编译配置和服务管理: 一、准备工作 1. 下载源码包和依赖(需联网环境准备)…

C++ 变量的输入输出教程

一、变量的基本概念 在 C 中,变量是用于存储数据的命名内存位置。在使用变量之前,需要先声明它的类型和名称,这样编译器才能为其分配适当大小的内存空间。例如: int age; // 声明一个整型变量 age double salary; // 声明一个…

React底层常见的设计模式

在React中,常见的设计模式为开发者提供了结构化和可重用的解决方案,有助于提高代码的可维护性和可扩展性。以下是对React中几种常见设计模式的详细解析,并附上示例代码和注释: 1. 容器组件与展示组件模式(Container/P…

【MATLAB例程】三维下的IMM(交互式多模型),模型使用CV(匀速)和CA(匀加速)

给出三维下的交互式多模型(IMM)matlab例程,模型使用匀速运动CV和匀加速运动CA,滤波使用EKF(扩展卡尔曼滤波) 文章目录 代码运行结果程序结构 代码讲解模型定义:轨迹生成:IMM核心流程…

物理内存组织与分配的核心概念

在 Linux 内核内存管理(尤其是 Buddy System 伙伴系统)中,node、zone、type 和 order 是描述物理内存组织与分配的核心概念。以下是它们的详细解释: 1. Node(NUMA 节点) 定义: 在 NUMA&#xf…

智科技赋能宠物关怀新时代

在科技日新月异的今天,智能宠物监控技术正悄然引领宠物护理领域的新变革。借助尖端的传感器技术、高清摄像头以及强大的数据分析能力,这些智能系统为宠物主人开辟了前所未有的宠物关怀途径,让爱与关怀跨越时空限制。 智能宠物监控系统的核心…

SOME/IP 教程知识点总结

总结关于SOME/IP的教程,首先通读整个文件,理解各个部分的内容。看起来这个教程从介绍开始,讲到了为什么在车辆中使用以太网,然后详细讲解了SOME/IP的概念、序列化、消息传递、服务发现(SOME/IP-SD)、发布/订阅机制以及支持情况。 首先,我需要确认每个章节的主要知识点。…

playbin之autoplug_factories源码剖析

一、autoplug_factories_cb /* Called when we must provide a list of factories to plug to pad with caps.* We first check if we have a sink that can handle the format and if we do, we* return NULL, to expose the pad. If we have no sink (or the sink does not…

58区间和+44开发商购买土地(前缀和)

58. 区间和(第九期模拟笔试) 题目描述 给定一个整数数组 Array,请计算该数组在每个指定区间内元素的总和。 输入描述 第一行输入为整数数组 Array 的长度 n,接下来 n 行,每行一个整数,表示数组的元素。…

laravel11设置中文语言包

安装中文语言包 Laravel 11 默认没有内置完整中文语言包,推荐使用第三方维护的完整翻译: # 通过 Composer 安装语言包 composer require laravel-lang/common --dev# 发布中文语言文件到项目 php artisan lang:add zh_CN这会自动将中文语言文件生成到 l…

智能文档解析与语义分割:LlamaIndex 节点解析器模块全解

节点解析器模块 - LlamaIndex 文件内容的节点解析器 有几种基于文件的节点解析器,它们会根据解析的内容类型(JSON、Markdown 等)创建节点。 最简单的流程是将 FlatFileReader 与 SimpleFileNodeParser 结合使用,自动为每种内容类型选择最佳节点解析器。然后,可以将基于…

实现遍历Windows所有字体的基本属性

参考podofo #include <windows.h> #include <string> #include <memory> #include <set> #include <unordered_map> #include <vector> #include <algorithm> #include <iostream> #include <iomanip> #include <fst…

postman--接口测试工具安装和使用教程

postman–接口测试工具 postman是一款支持http协议的接口调试与测试工具&#xff0c;其主要特点就是功能强大&#xff0c;使用简单且易用性好 。 无论是开发人员进行接口调试&#xff0c;还是测试人员做接口测试&#xff0c;postman都是我们的首选工具之一 。 下面先通过一张…

综合练习 —— 递归、搜索与回溯算法

目录 一、1863. 找出所有子集的异或总和再求和 - 力扣&#xff08;LeetCode&#xff09; 算法代码&#xff1a; 代码思路 问题分析 核心思想 实现细节 代码解析 初始化 DFS 函数 时间复杂度 空间复杂度 示例运行 输入 运行过程 总结 二、 47. 全排列 II - 力扣&a…