异步解耦之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系统中给文件夹或文件添加备注的方法。在添加备注之前,首先我们要在需要显示备注的文件夹中显示“备注”标签,否则就算我们给某个文件夹添加了…

BAPI_PRODORD_CREATE-创建生产订单BAPI测试

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

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

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

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

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

服务器学习

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

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

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

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

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

这一年让我印象深刻的bug -- 让sql选择更合理的执行过程

1 业务场景 客户需要一个报表统计工单的各种信息,于是我们利用公司报表平台做了一个报表导出功能。可是当我们准备上ver环境时测试反应报表导出虽然数据正确但性能不能达标,导出非常缓慢。于是我就开始分析报表sql。 2 问题分析 相信有过开发经验的同学…

【Vue.js设计与实现】第二篇:响应系统-阅读笔记(持续更新)

从高层设计的角度去探讨框架需要关注的问题。 系列目录: 标题博客第一篇:框架设计概览【Vue.js设计与实现】第一篇:框架设计概览-阅读笔记第二篇:响应系统【Vue.js设计与实现】第二篇:响应系统-阅读笔记第三篇&#x…

Java 使用 ant.jar 执行 SQL 脚本文件

Java 使用 ant.jar 执行 SQL 脚本文件&#xff0c;很简单。 在 pom.xml 中导入 ant 依赖 <dependency><groupId>org.apache.ant</groupId><artifactId>ant</artifactId><version>1.10.11</version> </dependency>sql 脚本文件…

Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(二)

原文&#xff1a;Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第三章&#xff1a;分类 在第一章中&#xff0c;我提到最常见的监督学习任务是回归&#xff08;预测值&#xff09;和分类&#…

IGMP——网际组管理协议

目录 1 IGMP 1.1 IGMP 使用 IP 数据报传递其报文 1.2 IGMP 工作 第一阶段&#xff1a;加入多播组 第二阶段&#xff1a;探询组成员变化情况 1.3 IGMP 采用的一些具体措施&#xff0c;以避免增加大量开销 1 IGMP 标准 1989 年公布的 RFC 1112&#xff08;IGMPv1&#xff…

淘宝镜像到期如何切换镜像及如何安装淘宝镜像

淘宝镜像到期如何切换镜像及如何安装淘宝镜像 一、淘宝镜像到期如何切换新镜像二、第一次使用淘宝镜像如何配置镜像 一、淘宝镜像到期如何切换新镜像 清空缓存&#xff1a;npm cache clean --force切换镜像源&#xff1a;npm config set registry https://registry.npmmirror.…

你今年过年回去吗?

#过年 我是一名21岁刚毕业的大学生&#xff0c;专业是软件技术&#xff0c;主修c#&#xff0c;之前在上海实习了一年&#xff0c;正式工作后来到了深圳&#xff0c;进入了一家电商公司实习。至于我为什么转行了&#xff0c;大家懂的都懂 现在是20240203晚上19.39&#xff0c;还…

【Linux】Linux 开发工具(vim、gcc/g++、make/Makefile)+【小程序:进度条】-- 详解

我们在 Windows 中编写 C/C 程序时&#xff0c;常用的 VS2019 是一个集成开发环境&#xff0c;包含了很多工具包。而在 Linux 下开发&#xff0c;大部分的情况下都是使用一个个独立的工具。比如&#xff1a;编写代码用 vim&#xff0c;编译代码用 gcc&#xff0c;调试代码用 gd…

景区导览系统|智能导览|景区电子导览|智慧景区导览|AI智能导览

景区/园区导览系统是必不可少的服务内容&#xff0c;可提供提供指引导航&#xff0c;讲解景点、VR游览、预约购票等服务。随着元宇宙、VR、AR等数字科技的不断发展&#xff0c;导览系统的形式也从传统的纸质地图、指示牌等形式&#xff0c;发展为如今的VR/AR智慧导览。 作为国…