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

异步解耦之RabbitMQ(一)

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/660901.shtml

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

相关文章

孪生卷积神经网络(Siamese Convolutional Neural Network)的设计思路

孪生卷积神经网络(Siamese Convolutional Neural Network)是一种特殊类型的卷积神经网络,主要用于处理需要成对比较的数据,例如判断两个输入是否相似。 以下是孪生卷积神经网络的基本结构: 输入层:这一层…

019代码结构

什么是顺序结构? 什么是选择结构? boolean flag true; // 结果为true会执行大括号内的代码,否则不执行直接跳过 if(flag true){System.out.println("flag为真"); } 双if选择结构 if(flag true){// 结果为true会执行大括号内的代…

Vue3-Composition-API(二)

一、computed函数使用 1.computed 在前面我们讲解过计算属性computed:当我们的某些属性是依赖其他状态时,我们可以使用计算属性来处理 在前面的Options API中,我们是使用computed选项来完成的; 在Composition API中&#xff0c…

有哪些好用的洗地机推荐?洗地机品牌推荐

在如今快节奏的生活中,人们对于家居清洁的需求也越来越高。洗地机无疑成为了很多家庭清洁的得力助手。然而,在众多品牌和型号中,到底哪款洗地机值得入手呢,这可能是很多人都会发出的疑问,下面,我们接下来一…

JDBC - 结构优化1

JDBC - 结构优化1 文章目录 JDBC - 结构优化1三层架构1 什么是三层架构2 三层架构项目搭建 结构优化1 - 学生信息管理1 封装工具类2 ORM3 DAO 三层架构 1 什么是三层架构 **三层架构:**将程序划分为表示层, 业务逻辑层, 数据访问层三层,各层之间采用接…

vit细粒度图像分类(七)TBNet学习笔记

1.摘要 细粒度鸟类图像识别致力于实现鸟类图像的准确分类,是机器人视觉跟踪中的一项基础性工作。鉴于濒危鸟类的监测和保护对保护濒危鸟类具有重要意义,需要采用自动化方法来促进鸟类的监测。在这项工作中,我们提出了一种新的基于机器人视觉…

代码随想录算法训练营29期|day36任务以及具体安排

第八章 贪心算法 part05 435. 无重叠区间 class Solution {public int eraseOverlapIntervals(int[][] intervals) {Arrays.sort(intervals, (a,b)-> {return Integer.compare(a[0],b[0]);});if(intervals.length 1) return 0;int result 0;for(int i 1 ; i < interva…

分布式事务(三)—— 两阶段提交解决方案(2PC)

系列目录&#xff1a; 《分布式事务&#xff08;一&#xff09;—— 事务的基本概念》 《分布式事务&#xff08;二&#xff09;—— CAP和Base理论》 一、常见分布式事务解决方案 两阶段提交&#xff08;2PC&#xff0c;Two-phase Commit&#xff09;TCC补偿模式基于本地消…

springboot mybatis-plus 项目分层笔记

整体定义 config: 配置项&#xff0c;包含configuration注解 constants: 常量类enums: 枚举 exceptions: 全局异常处理&#xff0c;自定义异常&#xff0c;RestControllerAdvice 注解 fia3: 三大器依据执行顺序&#xff1a;过滤器filter、拦截器interceptor、切面aop 简称 fia…

算法设计与分析实验:快速选择与单调栈

目录 一、找到K个最接近的元素 1.1 具体思路 1.2 思路展示 1.3 代码实现 1.4 复杂度分析 1.5 运行结果 二、前K个高频元素 2.1 思路一&#xff1a;哈希表 2.2 思路二&#xff1a;快速选择 2.3 思路三&#xff1a;堆 三、柱形图中的最大矩形 3.1 具体思路 3.2 思路…

Mysql单行函数练习

数据表 链接&#xff1a;https://pan.baidu.com/s/1dPitBSxLznogqsbfwmih2Q 提取码&#xff1a;b0rp --来自百度网盘超级会员V5的分享 单行函数练习 单行函数(一行数据返回一个结果) #1.显示系统时间(注:日期时间) #2.查询员工工号,姓名,工资以及提高百分之20后的结果(new…

2024年Java SpringBoot 计算机软件毕业设计题目推荐

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行交流合作✌ 主要内容&#xff1a;SpringBoot、Vue、SSM、HLM…

Flume搭建

压缩包版本&#xff1a;apache-flume-1.9.0-bin.tar 百度盘链接&#xff1a;https://pan.baidu.com/s/1ZhSiePUye9ax7TW5XbfWdw 提取码&#xff1a;ieks 1.解压 tar -zxvf /opt/software/apache-flume-1.9.0-bin.tar.gz -C /opt/module/ 2. 修改文件名 [rootbigdata1 opt]…

【stm32】hal库学习笔记-FSMC连接TFT_LCD

【stm32】hal库学习笔记-FSMC连接TFT LCD 触摸屏结构与原理 LCD模块接口原理图 LCD 接口连接在 FSMC 总线上面&#xff0c;图中的 T_MISO/T_MOSI/T_PEN/T_SCK/T_CS 连接在 MCU 的 PB2/PF11/PB1/PB0/PC13 上&#xff0c;这些信号用来实现对液晶触摸屏的控制&#xff08;支持电阻…

RHCE DNS域名解析服务器

目录 1. 正向解析 1.1 安装必要软件 1.2 配置静态ip 1.3 DNS配置 1.4 测试 2. 反向解析 2.1 关闭安全软件&#xff0c;安装必要软件 2.2 配置静态ip 2.3 DNS配置 2.4 测试 1. 正向解析 1.1 安装必要软件 1.2 配置静态ip 服务器配置 nmcli c modify ens32 ipv4.method man…

如何使用 Mermaid、GitHub 和 VSCode 用代码创建关系图三

Mermaid 系列 如何使用 Mermaid、GitHub 和 VSCode 用代码创建关系图一如何使用 Mermaid、GitHub 和 VSCode 用代码创建关系图二 1.如何创建甘特图 Gantt 甘特图以条形图的形式用作可视化表示。它有效地展示了项目的时间表&#xff0c;揭示了各个项目组件完成所需的持续时间…

leetcode刷题(剑指offer) 509.斐波那契数

509.斐波那契数 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。也就是&#xff1a; F(0) 0&#xff0c;F(1) 1 F(n) F(n - 1) F(n - 2)&#xff0c;其中 n…

Java玩转《啊哈算法》排序综合篇之小哼买书

是诸法空相&#xff0c;不生不灭&#xff0c;不垢不净&#xff0c;不增不减 非目录 缘起代码地址案例桶排序冒泡排序快速排序 缘起 各位大哥大姐&#xff0c;兄弟姐妹们好呀&#xff01;本人最近看了下《啊哈算法》&#xff0c;说来惭愧&#xff0c;买几年了&#xff0c;当初看…

Office提取某一页转成图片

目录结构 前言支持的文件格式代码整理maven依赖文本文档解析转换电子表格解析转换演示文档解析转换PDF解析转换小编代码整理(完整版)特别感谢扩展前言 近期公司需求,要将office文件提取第一页内容转成图片;一番调查后整理如下: 支持的文件格式 文本文档电子表格演示文档…

协会认证!百望云荣获信创工委会年度“卓越贡献成员单位”称号

当前&#xff0c;新一轮科技革命和产业变革正加速重塑全球经济结构&#xff0c;强化企业科技创新的主体地位&#xff0c;推动创新链、产业链、人才链深度融合&#xff0c;加快科技成果产业化进程至关重要。 近日&#xff0c;中国电子工业标准化技术协会信息技术应用创新工作委员…