异步解耦之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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java设计模式-组合模式(13)

大家好,我是馆长!今天开始我们讲的是结构型模式中的组合模式。老规矩,讲解之前再次熟悉下结构型模式包含:代理模式、适配器模式、桥接模式、装饰器模式、外观模式、享元模式、组合模式,共7种设计模式。 组合模式(Composite Pattern) 定义 组合(Composite)模式:又叫…

深度学习与神经网络Pytorch版 3.2 线性回归从零开始实现 1.生成数据集

3.2 线性回归从零开始实现 目录 3.2 线性回归从零开始实现 一 ,简介 1. 原理 2. 步骤 3. 优缺点 4. 应用场景 二 ,代码展现 1. 生成数据集(完整代码) 2. 各个函数解析 2.1 torch.normal()函数 2.2 torch.matmul()函数 2.3 d2l.plt.scatter(…

【教学类-44-54】20240201 德彪钢笔行书(实线字体)制作的数字描字帖

作品展示 背景需求: 找到了两款适合做数字描字贴的字体 【教学类-44-03】20240111阿拉伯数字字帖的字体(三)——德彪钢笔行书(实线字体)和print dashed(虚线字体)-CSDN博客文章浏览阅读1.1k次…

【HarmonyOS】鸿蒙开发之HTTP网络请求——第5章

HTTP网络请求封装 network/request.ets import { configInterface } from ./type import http from ohos.net.http import { getToken } from ../utils/storage//网络请求封装 export const request (config:configInterface)>{let httpRequest:http.HttpRequest http.c…

༺༽༾ཊ—Unity之-01-工厂方法模式—ཏ༿༼༻

首先创建一个项目, 在这个初始界面我们需要做一些准备工作, 建基础通用文件夹, 创建一个Plane 重置后 缩放100倍 加一个颜色, 任务:使用工厂方法模式 创建 飞船模型, 首先资源商店下载飞船模型&#xff0c…

二进制安全虚拟机Protostar靶场(5)堆的简单介绍以及实战 heap0

前言 这是一个系列文章,之前已经介绍过一些二进制安全的基础知识,这里就不过多重复提及,不熟悉的同学可以去看看我之前写的文章 什么是堆 堆是动态内存分配的区域,程序在运行时用来分配内存。它与栈不同,栈用于静态…

【Vue3+Vite】Vue3视图渲染技术 快速学习 第二期

文章目录 一、模版语法1.1 插值表达式和文本渲染1.1.1 插值表达式 语法1.1.2 文本渲染 语法 1.2 Attribute属性渲染1.3 事件的绑定 二、响应式基础2.1 响应式需求案例2.2 响应式实现关键字ref2.3 响应式实现关键字reactive2.4 扩展响应式关键字toRefs 和 toRef 三、条件和列表渲…

农业植保无人机行业研究:预计2025年市场规模可达115亿元

农业植保无人机行业市场投资前景现状如何?农业植保无人机市场,包括无人机自身技术、性能标准和植保标准。农业植保无人机应用植保机喷洒农药对我国而言,不仅具有很大的经济价值,还具有社会价值:农业植保机作业不仅有超高的工作效…

并网逆变器学习笔记8---平衡桥(独立中线模块)控制

参考文献:《带独立中线模块的三相四线制逆变器中线电压脉动抑制方法》---赵文心 一、独立中线模块的三相四线拓扑 独立中线模块是控制中线电压恒为母线一半,同时为零序电流ineu提供通路。不平衡负载的零序电流会导致中线电压脉动,因此需要控制…

【Android 字节码插桩】Gradle插件基础 Transform API的使用

前言 啪~我给大家开个会(手机扔桌子上) 什么叫做 客户无感的数据脱敏!? 师爷给翻译翻译什么叫做客户无感的数据脱敏? 什么特么的叫做客户无感数据脱敏? 举个栗子~ 客户端Sdk新升级了一个版本,增…

UnityShader(九)Unity中的基础光照(下)

目录 标准光照模型 自发光 高光反射 (1)Phong模型 (2)Blinn模型 漫反射 环境光 逐顶点还是逐像素 逐像素光照 逐顶点光照 总结 标准光照模型 光照模型有许多种,但在早期游戏引擎中,往往只使用一…

linux -- 并发 -- 并发来源与简单的解决并发的手段

互斥与同步 当多个执行路径并发执行时,确保对共享资源的访问安全是驱动程序员不得不面对的问题 互斥:对资源的排他性访问 同步:对进程执行的先后顺序做出妥善的安排 一些概念: 临界区:对共享的资源进行访问的代码片段…

1、缓存击穿背后的问题

当面试官问:你知道什么是缓存击穿吗,你们是如何解决的? 首先我们要了解什么是缓存击穿?以及缓存击穿会引发什么问题? 缓存击穿就是redis中的热点数据过期,缓存失效,导致大量的请求直接打到数据…

【免费分享】数据可视化-银行动态实时大屏监管系统,含源码

一、动态效果展示 1. 动态实时更新数据效果图 ​ 2. 鼠标右键切换主题 二、确定需求方案 1. 屏幕分辨率 这个案例的分辨率是16:9,最常用的的宽屏比。 根据电脑分辨率屏幕自适应显示,F11全屏查看; 2. 部署方式 B/S方式:支持…

使用了不受支持的协议。 ERR_SSL_VERSION_OR_CIPHER_MISMATCH的问题解决办法

windwos 2008 R2 使用IIS部署的项目申请使用https协议的时候,通过安全加密协议访问网站提示不受支持的协议 错误原因分析 这种错误通常表示客户端和服务器之间存在协议版本或加密套件不兼容导致在SSL(Secure Socket Layer) 1.协议版本不兼容&…

壹[1],Xamarin开发环境配置

1,环境 VS2022 注: 1,本来计划使用AndroidStudio,但是也是一堆莫名的配置让人搞得很神伤,还是回归C#。 2,MAUI操作类似,但是很多错误解来解去,且调试起来很卡。 3,最…

哪个牌子的头戴式耳机好?推荐性价比高的头戴式耳机品牌

随着科技的不断发展,耳机市场也呈现出百花齐放的态势,从高端的奢侈品牌到亲民的平价品牌,各种款式、功能的耳机层出不穷,而头戴式耳机作为其中的一员,凭借其优秀的音质和降噪功能,受到了广大用户的喜爱&…

C++文件操作(2)

文件操作(2) 1.二进制模式读取文本文件2.使用二进制读写其他类型内容3.fstream类4.文件的随机存取文件指针的获取文件指针的移动 1.二进制模式读取文本文件 用二进制方式打开文本存储的文件时,也可以读取其中的内容,因为文本文件…

Flask 入门3:Flask 请求上下文与请求

1. 前言 Flask 在处理请求与响应的过程: 首先我们从浏览器发送一个请求到服务端,由 Flask 接收了这个请求以后,这个请求将会由路由系统接收。然后在路由系统中,还可以挂入一些 “勾子”,在进入我们的 viewFunction …

【C++】开源:Windows图形库EasyX配置与使用

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍Windows图形库EasyX配置与使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下&#…