异步解耦之RabbitMQ(二)_RabbitMQ架构及交换机

异步解耦之RabbitMQ(一)-CSDN博客

RabbitMQ架构

RabbitMQ是一个基于AMQP(Advanced Message Queuing Protocol)协议的消息代理中间件,它通过交换机和队列实现消息的路由和分发。以下是RabbitMQ的架构图:

  1. Producer(生产者):Producer是消息的发送方,它将消息发送到RabbitMQ的交换机。生产者可以是任何发送消息的应用程序。

  2. Exchange(交换机):Exchange是消息的路由器,负责接收来自生产者的消息,并根据预定义的规则将消息路由到一个或多个队列中。RabbitMQ支持多种类型的交换机:直连交换机、主题交换机、扇形交换机和头交换机。每种类型的交换机都根据不同的路由规则将消息转发给队列。

  3. Queue(队列):Queue是消息的缓冲区,用于存储交换机转发的消息。当消息到达队列时,它将等待消费者来处理。每个消息都会被分配到一个特定的队列中,消费者将从该队列中获取消息。

  4. Binding(绑定):Binding是交换机和队列之间的关联关系。通过绑定,交换机可以将消息路由到与之绑定的队列。绑定通常包含一个路由键(routing key),它是交换机将消息路由到队列的依据。

  5. Consumer(消费者):Consumer是消息的接收方,它从队列中获取消息并进行处理。消费者可以是任何接收消息的应用程序。一般情况下,多个消费者可以同时从一个队列中获取消息,并实现消息的并发处理。

RabbitMQ在架构中还包含以下关键特性:

  • Virtual Host(虚拟主机):虚拟主机是逻辑上的独立环境,每个虚拟主机都有自己的交换机、队列和绑定。它们可以帮助不同的应用程序或不同的团队在同一个RabbitMQ服务器上进行隔离。

  • Connection(连接):生产者和消费者与RabbitMQ建立的连接。每个连接可以有多个通道(Channel),通道是在连接中打开的独立会话,用于发送和接收消息。

  • Message Acknowledgement(消息确认):当消费者成功处理一条消息后,它将向RabbitMQ发送一个确认消息。RabbitMQ收到确认后,将从队列中删除该消息。如果消费者在处理消息期间出现故障,消息将被重新投递给其他消费者。

  • Message Durability(消息持久化):通过将消息标记为持久化,可以确保在RabbitMQ服务器重启后消息不会丢失。

  • Dead Letter Exchange(死信交换机):当消息无法被路由到任何队列时,它将被发送到死信交换机。可以配置一个特定的队列来接收这些死信消息,以便进一步处理。

  • Message TTL(消息过期时间):可以为消息设置过期时间,当消息在指定的时间内未被消费者处理时,它将被自动删除。

通过这些组件和特性,RabbitMQ提供了一个灵活可靠的消息传递机制,使得应用程序之间可以进行异步通信,并实现解耦和可伸缩性。

RabbitMQ的核心是交换机和队列。交换机有四种类型:直连交换机、主题交换机、头交换机和扇形交换机。每种类型的交换机都有自己的路由规则,可根据不同场景选择适合的交换机类型。队列则是存储消息的地方,它们会等待消费者来处理消息。

整个系统中的消息流动过程如下:

  1. 生产者将消息发布到交换机上。

  2. 交换机按照特定的路由规则将消息路由到相应的队列上。

  3. 消费者从队列中取出消息并进行处理。

  4. 消费者处理完成后,将消息从队列中删除。

RabbitMQ还提供了一些高级功能,如可靠性保证、消息持久化、优先级队列等。

RabbitMQ的四种交换机

RabbitMQ支持四种类型的交换机:直连交换机(Direct Exchange)、主题交换机(Topic Exchange)、扇形交换机(Fanout Exchange)和头交换机(Headers Exchange)。

1. 直连交换机(Direct Exchange)

直连交换机是最简单的交换机类型之一。它根据消息的路由键(Routing Key)将消息直接路由到与之完全匹配的队列。当生产者发送消息时,会指定一个特定的路由键。交换机会检查消息的路由键与绑定到该交换机的队列的路由键是否完全匹配。如果匹配,消息将被路由到相应的队列中。

直连交换机的特点:

  • 路由键与队列之间的完全匹配。
  • 一对一的消息路由方式。

缺点:

  • 不支持模式匹配和通配符匹配。
  • 灵活性不够。

例子应用场景:

  • 日志系统:根据日志级别将不同级别的日志消息路由到不同的队列。
  • 订单系统:根据订单状态将不同状态的订单消息路由到不同的队列。

2. 主题交换机(Topic Exchange)

主题交换机允许更灵活的消息路由。它使用通配符匹配路由键,并将消息路由到符合通配符表达式的队列中。通配符有两种形式:*代表匹配一个单词,#代表匹配零个或多个单词。例如,路由键是stock.usd.nyse,则通配符是stock.*.*;路由键是stock.usd.nyse.apple,则通配符是stock.#

主题交换机的特点:

  • 路由键与队列之间的通配符匹配。
  • 一对多的消息路由方式。

缺点:

  • 配置相对较复杂,需要了解路由键规则和通配符规则。
  • 性能可能会受到一定影响,因为需要进行模式匹配。

例子应用场景:

  • 新闻发布系统:根据新闻的主题标签将消息路由到对应的队列中。
  • 物联网系统:根据设备类型和区域将消息路由到相应的队列中。

3. 扇形交换机(Fanout Exchange)

扇形交换机是一种广播式的路由机制。它会将接收到的消息广播到所有绑定到该交换机上的队列中,无需考虑路由键的匹配。当生产者发送消息给扇形交换机时,交换机会忽略消息的路由键,而是将消息发送给所有绑定的队列。

扇形交换机的特点:

  • 忽略路由键,广播消息给所有队列。
  • 一对多的消息路由方式。

缺点:

  • 不支持路由键,无法根据不同的路由键进行处理。
  • 可能会有一些冗余的消息,因为所有的队列都会接收相同的消息。

例子应用场景:

  • 实时聊天系统:将聊天消息广播到所有在线用户的队列中。
  • 分布式任务系统:将任务请求广播给所有可用的工作节点。

4. 头交换机(Headers Exchange)

头交换机是根据消息头部信息(Headers)进行路由的交换机。头部信息可以是键值对的形式,生产者在发送消息时可以指定一组键值对。交换机会根据这些键值对与队列绑定时指定的参数进行匹配,如果匹配成功则将消息路由到相应的队列中。

头交换机的特点:

  • 根据消息头部信息进行匹配。
  • 复杂的消息路由方式。

缺点:

  • 配置相对较复杂,需要了解键值对的规则。
  • 性能较低,因为需要进行复杂的匹配操作。

例子应用场景:

  • 消息过滤系统:根据消息的特定属性进行过滤,并将消息路由到相应的队列中。
  • 数据分析系统:根据数据的特征进行分类并将数据路由到不同的队列中。

通过了解这四种交换机类型的原理和特性,我们可以灵活地在RabbitMQ中设计和实现消息传递系统,以满足不同的需求。

无论是直连交换机、主题交换机、扇形交换机还是头交换机,它们都为我们提供了强大的消息路由机制。根据具体的业务需求,我们可以选择合适的交换机类型来构建灵活可靠的消息传递系统。

参考资料:

  • RabbitMQ官方网站:RabbitMQ: easy to use, flexible messaging and streaming — RabbitMQ
  • RabbitMQ文档:Documentation: Table of Contents — RabbitMQ

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

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

相关文章

NAS系统折腾记 – Emby搭建家庭多媒体服务器

Emby简介 Emby是一款优秀的媒体服务器软件,致力于为用户提供丰富的多媒体体验。通过Emby,您可以方便地在家庭内的各种设备上观看您喜爱的电影、电视剧和其他视频内容。而且,Emby还具备强大的媒体管理功能,让您的影视资源井然有序…

Win10系统给文件夹添加备注

在Win10系统中,相信大多用户都没有看到过文件或者是文件夹上有备注信息。下面给大家分享下在Win10系统中给文件夹或文件添加备注的方法。在添加备注之前,首先我们要在需要显示备注的文件夹中显示“备注”标签,否则就算我们给某个文件夹添加了…

如何确定python包的依赖关系

要确定哪些包依赖于 pyee,你可以使用 pip show 命令来查看特定包的详细信息,其中包括其依赖关系。 你可以执行以下命令来查看哪些包依赖于 pyee: sqlCopy code pip show pyee 这会显示与 pyee 包相关的详细信息,包括其版本、安…

nginx 的 ngx_http_upstream_dynamic_module 动态域名解析功能的使用和源码详解

tengine ngx_http_upstream_dynamic_module 动态域名解析功能的代码详细解析 1. 为什么需要域名动态解析2. 配置指令3. 加载模块3. 源码分析3.1 指令解析3.2 upstream负载均衡算法的初始化3.3 upstream负载均衡上下文的初始化3.4 获取upstream的服务器地址3.5 域名解析回调处理…

BAPI_PRODORD_CREATE-创建生产订单BAPI测试

目录 实现过程和笔记完整程序 实现过程和笔记 完整程序 *&---------------------------------------------------------------------* *& Report z_test_bapi_prodord_create_lhy *&---------------------------------------------------------------------* *&am…

【Java万花筒】Java图形库探秘:创意编程、数据可视化与用户界面设计

图形化未来:Java图形库全面解析与应用指南 前言 在Java开发的世界中,图形处理一直是一个关键领域,涉及从创意编程到数据可视化再到用户界面设计的多个方面。本文将深入探讨几个领域内颇具代表性的Java图形库,为开发者提供了解和…

广州产业园神秘顾客考察指标有哪些

随着经济的发展和产业结构的升级,产业园在推动区域经济增长中的地位日益凸显。为了确保产业园的持续发展与竞争力,对其进行神秘顾客考察显得尤为重要。产业园神秘顾客考察包括以下几点: 一、基础设施建设 交通便捷性:评估产业园…

【QT+QGIS跨平台编译】之二十五:【geos+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、geos介绍二、文件下载三、文件分析四、pro文件4.1 geos pro文件4.2 geos_c pro文件五、编译实践一、geos介绍 GEOS(Geometry Engine - Open Source)是一个开源的C++库,用于处理地理空间数据和进行地理空间分析。它提供了一系列的几何操作和算法,能够进行空间…

docker入门之更新应用程序

指南/开始使用/入门指南/第 3 部分:更新应用程序 更新应用程序 在 第 2 部分中,您容器化了一个待办事项应用程序。在此部分中,您将更新应用程序和映像。您还将学习如何停止和删除容器。 更新源代码 在以下步骤中,您将在没有任…

视频编辑场景手绘白板解决方案

传统的视频编辑方式已经不能满足现代企业的多元化需求,美摄科技推出了手绘白板方案,为企业提供了一种全新的直播和视频编辑方式,让手绘内容成为视频的一部分,增强了互动性和视觉效果。 一、手绘白板方案的优势 1、实时手绘&…

《PCI Express体系结构导读》随记 —— 第II篇 第4章 PCIe总线概述(6)

接前一篇文章:《PCI Express体系结构导读》随记 —— 第II篇 第4章 PCIe总线概述(5) 4.1 PCIe总线的基础知识 与PCI总线不同,PCIe总线使用端到端的连接方式,在一条PCIe链路的两端只能各连接一个设备,这两个…

RflySim | 定点位置控制器设计实验四

RflySim| 定点位置控制器设计实验四 01 设计实验 1.建立位置控制通道的传递函数模型 使用MATLAB “ControlSystemDesigner”设计校正控制器,使得加入校正环节后系统速度控制环阶跃响应稳态误差 ,相位裕度>75截止频率>2.0rad/s。位置控制环截止频率>1rad/…

《Vue3 基础知识》 使用 GoGoCod 升级到Vue3+ElementPlus 适配处理

此篇为 《Vue2ElementUI 自动转 Vue3ElementPlus(GoGoCode)》 的扩展! Vue3 适配 Vue3 不兼容适配 Vue 3 迁移指南 在此,本章只讲述项目或组件库中遇到的问题; Vue3 移除 o n , on, on&#…

蓝桥杯备战(AcWing算法基础课)-高精度-除-高精度

目录 前言 1 题目描述 2 分析 2.1 关键代码 2.2 关键代码分析 3 代码 前言 详细的代码里面有自己的部分理解注释,注意该博客内容实现的高精度-除-高精度是利用前面写的高精度-减-高精度实现的的时间复杂度是O(n^2) 1 题目描述 给定两…

第十一章[文件系统]:11.2:文件的复制/删除/移动

一,相关文档: os模块: os --- 多种操作系统接口 — Python 3.12.1 文档源代码: Lib/os.py 本模块提供了一种使用与操作系统相关的功能的便捷式途径。 如果你只是想读写一个文件,请参阅 open() ,如果你想操作文件路径,请参阅 os.path 模块,如果你想读取通过命令行给出的所…

服务器学习

云服务器通常是通过多台物理服务器协同工作来提供的。云服务提供商使用大规模的数据中心,这些数据中心包含许多物理服务器。这些物理服务器上运行着虚拟化技术,允许它们被分割成多个虚拟服务器实例。 当用户请求创建一个云服务器时,云服务提…

【5G SA流程】5G SA下终端完整注册流程介绍

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客内容主要围绕: 5G/6G协议讲解 …

阿里云计算巢是什么?计算巢服务详细介绍

什么是计算巢服务?阿里云计算巢服务是一个开放给服务商和用户的服务管理PaaS平台,计算巢服务为服务商和用户提供了高效、便捷、安全的服务使用体验,服务商能更好地在阿里云上部署、交付和管理服务,用户能集中管理在阿里云上订阅的…

Postgresql PostGIS扩展

PostGIS是一个开源的PostgreSQL扩展,用于提供地理信息系统(GIS)功能。通过添加对空间数据类型、空间索引和空间函数的支持,PostGIS将PostgreSQL数据库转换为强大的空间数据库。在PostgreSQL中,PostGIS提供了对空间数据…

Python算法题集_搜索二维矩阵II

Python算法题集_搜索二维矩阵II 题41:搜索二维矩阵II1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【双层循环】2) 改进版一【行尾检测】3) 改进版二【对角线划分】 4. 最优算法 本文为Python算法题集之一的代码示例 题41&#xf…