RabbitMQ消息队列的工作模式

news2024/12/23 22:12:15

文章目录

    • 1.RabbitMQ常用的工作模式
    • 2.简单模式
    • 3.WorkQueues工作队列模式
    • 4.Pub/Sub发布订阅模式
    • 5.Routing路由模式
    • 6.Topics通配符模式

1.RabbitMQ常用的工作模式

官方文档地址:https://www.rabbitmq.com/getstarted.html

工作模式其实就是消息队列分发消息的路由方式。

RabbitMQ常用的几种工作模式:

  • 简单模式
  • WorkQueues工作队列模式
  • PubSub生产者/PubSub消费者模式
  • Routing路由模式
  • Topics通配符模式
    发布/订阅模式(Publish/Subscribe):该模式用于一对多的消息广播。生产者将消息发送到交换机(Exchange),而交换机将消息广播给所有绑定到它的队列(Queue)。每个队列都有自己的消费者。这种模式可以用于实现日志记录、即时通知等场景。

请求/应答模式(Request/Reply):在这种模式下,客户端发送一个请求消息到队列中,然后一个或多个消费者处理该请求并发送响应消息回复给客户端。这种模式常用于需要客户端与服务端之间进行双向通信的场景,例如RPC(远程过程调用)。

确认模式(Acknowledgements):RabbitMQ支持消息的确认机制。当消费者从队列中获取消息并成功处理后,会向RabbitMQ发送一个确认消息。这样可以确保消息被正确处理,避免消息丢失。

延迟队列模式(Delay Queues):延迟队列模式用于延迟处理消息。消息被发送到延迟队列,等待一段时间后再被转发到目标队列进行处理。这种模式可以用于实现定时任务、延迟通知等功能。

死信队列模式(Dead-Letter Queues):当消息无法被消费或被拒绝时,可以将其发送到死信队列。死信队列通常用于处理无法被处理的消息,以便进一步分析和处理。

2.简单模式

简单模式最容易理解,一个生产者一个消费者,生产者产生数据写入MQ消息队列,消费者从MQ中读取消息数据进行处理。

在这里插入图片描述

3.WorkQueues工作队列模式

WorkQueues工作队列模式由多个消费端组成,与简单模式相比,多了一个或者一组消费端,多个消费端共同消费同一个队列中的消息数据,但是多个消费端会抢着读取队列中的一条消息数据。

多个消费者消费数据的方式是轮询。

一个队列中如果存在多个消费者,那么消费者之间对于同一个消息的关系是竞争关系,只有一个消费端去处理这一条消息数据,争前恐后去抢一条数据进行处理,因此说是竞争关系。

应用场景:对于任务过重或者任务较多的情况下,工作队列模式可以提供任务的处理速度,因为是多个消费端同时处理消息数据,例如短发分发,只需要有一个消费端成功发送即可。

在这里插入图片描述

4.Pub/Sub发布订阅模式

在前面的两种模式中,一个消费方只能处理一个消息数据,效率并不高,从而引来了Pub/Sub发布订阅模式,发布订阅模式中的多个消费者可以同时对一条消息数据进行处理。

如下图所示,在发布订阅模式中多了一个组件,这个组件就是Exchange交换组件,生产者发布数据到MQ消息队列,首先会进入到Exchange交换组件,由Exchange将消息数据路由分发到不同的队列中,然后消费者同时从不同的队列中消费数据。

Exchange可以看似将一条消息数据拆分成了多个内容,然后分别存放在不同的队列中,这样多个消费者就可以在不同的队列中同时消费数据。

在这里插入图片描述

P:生产者,发送消息的程序,不会直接发送到消息队列,而是先发送给X(交换机)。

C:消费者,消息的接收者,一直等待消息数据的到来。

Queue:消息队列,接收消息、缓存消息、

Exchange:交换机,接收生产者发送的消息,将消息传递给某个特别队列、传递给所有队列、或者将消息丢弃,如何操作就要取决于Exchange的类型。

常见的Exchange交换机类型:

  • Fanout:广播,将消息交给所有绑定到交换机的队列。
  • Direct:定向,将消息交给符合routing key的队列。
  • Topic:通配符,将消息交给符合routing pattern路由模式的队列。

Exchange只负责转发消息,不具备存储消息的能力,如果没有队列与Exchange绑定,那么消息就会丢失。

5.Routing路由模式

Routing是Exchange中的一种类型,使用Routing路由模式,可以将不同级别的消息数据路由到特定的消息队列中,再由特定的消费者进行接收处理。

Routing的应用场景举例:将error级别的消息数据通过A消费者写入到数据,其他级别的消息数据通过B程序展示在控制台。

使用Routing路由模式时,Exchange与队列也不再进行绑定了,而是通过声明一个RoutingKey,通过这个key将消息路由到特定的队列中,因此在消息发送方发消息时,就需要指定消息的RoutingKey,Routing根据消息中的RoutingKey进行判断,当消息中的RoutingKey与队列中的RoutingKey完全一致时,消息才能正常存储到队列中,最后被消费者处理。
在这里插入图片描述

6.Topics通配符模式

Topics模式是功能最强大的一个模式,具备上述所有模式的功能。

Topics是Exchange中的一种类型,当指定模式为Topic时,消息数据的路由就支持了通配符的形式,例如当消息发送方发送的数据中,RouteingKey包含orange的消息数据都被路由到Q1队列中,消息的RouteingKey包含rabbit的数据被路由到Q2队列中。当一个RouteingKey同时满足两个队列的条件时,会将消息同时分发到两个队列中。

简而言之,使用Topic模式后,可以对消息数据中的RoutingKey进行通配符匹配,将满足条件的消息数据分发到特定的队列中。

在这里插入图片描述

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

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

相关文章

mysql死锁问题分析

死锁问题分析 起因 起因是线上报了一个死锁问题,然后我就去查看下死锁的原因。 思路 死锁问题的排查, **日常工作中,应对各类线上异常都要有我们自己的 SOP (标准作业流程) ** ,这样不仅能够提高自己的处理问题效率&#xff…

智能本质上是人性的拓扑

智能技术的发展是基于人类智慧和思维方式的延伸和拓展,人类的智慧和思维方式是智能的基础,人类是智能技术的创造者和主导者。然而,人工智能技术却与人性并不一致,根本上,人工智能技术并不具备人类的情感、道德、意识等…

适配器模式(Adapter)

定义 适配器是一种结构型设计模式,它能使接口不兼容的对象能够相互合作。 别名 封装器模式(Wrapper)。 前言 1. 问题 假如你正在开发一款股票市场监测程序,它会从不同来源下载 XML 格式的股票数据,然后向用户呈现…

通过skia导出pdf 生成超链接 skia pdfdocument annotation pdflink

如题 最近导出pdf ,想实现文本支持超链接跳转, 看了下skia的官网文档, 翻墙找各种资料 就是找不到关于怎么实现,毫无头绪咋办呢 我想了一下 1.粗略翻阅了下pdf的格式 了解了下基本的构成 啥root page text 啥的 2.通过pdf格式了解到 链接是通过LinkAn…

npm发布自己的公网包步骤详解

初始化项目 比如我,创建了code-transfor-text_vue项目 根目录初始化git git init .建立开源协议 给项目根目录手动创建LICENSE文件文件,没有后缀名 MIT LicenseCopyright (c) 2023 quanyiPermission is hereby granted, free of charge, to any pers…

Verdaccio搭建本地npm仓库

背景 Verdaccio 是一个 Node.js创建的轻量的私有npm proxy registry 我们在开发npm包的时候,经常需要验证发包流程,或者开发的npm包仅局限于公司内部使用时,就可以借助Verdaccio搭建一个npm仓库,搭建完之后,只要更改np…

DataLeap的全链路智能监控报警实践(二):概念介绍

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 概念介绍 基线监控 根据监控规则和任务运行情况,DataLeap的基线监控能够决策是否报警、何时报警、如何报警以及给谁报警。它保障的是任务整体产出链路&a…

MySQL 数据库操作指南:学习如何使用 Python 进行增删改查操作

文章目录 MySQL 知识点1.1 数据库创建和选择1.2 数据表创建和修改1.3 插入数据1.4 查询数据1.5 更新和删除数据 1.6 索引的创建和使用1.7 外键的使用 Python 中使用 MySQL2.1 连接数据库2.2 创建数据库和数据表2.3 插入数据2.4 查询数据2.5 更新和删除数据2.6 关闭连接 2.7 数据…

【算法系列之贪心算法I】leetcode376. 摆动序列

455.分发饼干 力扣题目链接 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j&…

详细讲解!接口性能测试方案

目录 前言: 性能测试术语解释 性能测试方法及目标 性能需求分析 性能测试范围 性能测试用例与场景 性能测试工具选择 性能测试结果分析 性能测试通过标准 前言: 接口性能测试是指测试系统中各个接口的性能,包括响应时间、吞吐量、并…

现在企业都在强调的客户体验,如何从官网帮助文档入手?

在当前激烈的市场竞争中,企业已经逐渐意识到客户体验的重要性。客户体验是指通过产品和服务所提供的一系列互动和接触,客户对企业的全面感受和评价。而在客户体验中,官网帮助文档作为企业与客户之间互动的重要环节,也扮演着重要的…

性能测试之测试指标

目录 前言 系统性能指标 资源指标 中间件指标 数据库指标 前端指标 稳定性指标 批量处理指标 可扩展性指标 可靠性指标 前言 性能测试是测试一个系统在特定条件下的响应时间、并发用户数、吞吐量、内存使用率、CPU利用率、网络延迟等各项指标的过程。测试指标是根据…

Alibaba Cloud Linux 3.2104 LTS 64位 安装lnmp环境php8、mysql8

Alibaba Cloud Linux 3.2104 LTS 64位服务器安装lnmp环境全过程 以下都为阿里云购买的服务器为例 前言 购买了阿里云的服务器之后切记切记切记! 第一步设置:更多> 网络和安全组> 安全组配置>入方向 第二步 设置root账户的密码(如…

如何在矩池云复现开源对话语言模型 ChatGLM

ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。 Chat…

ART-Pi BT_WiFi 模块固件下载

源文件《UM5003-RT-Thread ART-Pi BT_WIFI 模块固件下载手册.md》 ART-Pi BT_WiFi 模块固件下载 ART-Pi 板卡在出厂时已经烧录过 BT_WiFi 固件,存储在外部 Flash。如果固件被不慎擦除,会导致 BT_WiFi 模组的功能无法正常使用,出现异常情况&…

【图像处理OpenCV(C++版)】——5.2 图像平滑之高斯平滑

前言: 😊😊😊欢迎来到本博客😊😊😊 🌟🌟🌟 本专栏主要结合OpenCV和C来实现一些基本的图像处理算法并详细解释各参数含义,适用于平时学习、工作快…

RabbitMQ常见的应用问题

文章目录 1.消息可靠性保障2.消息的幂等性保障 1.消息可靠性保障 在实际生产环境中,可能会由于网络问题导致消息接收异常产生某种影响,基于这种情况我们需要保障消息的可靠性。 RabbitMQ中的消息可靠性也称为消息补偿,如下图所示&#xff0…

浅析 Jetty 中的线程优化思路

作者:vivo 互联网服务器团队- Wang Ke 本文介绍了 Jetty 中 ManagedSelector 和 ExecutionStrategy 的设计实现,通过与原生 select 调用的对比揭示了 Jetty 的线程优化思路。Jetty 设计了一个自适应的线程执行策略(EatWhatYouKill&#xff09…

Origin如何绘制带拟合曲线的频数分布图?

文章目录 0.引言1.准备数据2.频数分布参数设置并绘图3.拟合曲线参数设置并绘图 0.引言 笔者研究的方向关于点云数据采集和建模算法,在对一个平面进行数据采集并建模后,需要实验结果进行精度分析,为了知道建模结果的点云集中于平面的程度&…

专场来袭,深度解读阿里云视频云的全智能进化

云智深度融合,视频云将幻化出怎样的新光景? 01 「云智新生」_ 视频云的全智能进化 新数智时代,云和AI在走向深度融合,以云计算为基石、以AI为引擎的云智深度融合,俨然成为行业共识。以“云智”为支撑,视频云…