RabbitMQ 工作模式

news2025/5/13 10:48:57

RabbitMQ 一共有 7 中工作模式,可以先去官网上了解一下(一下截图均来自官网):RabbitMQ 官网

Simple

  • P:生产者,要发送消息的程序;
  • C:消费者,消息的接受者;
  • hello:要发送的消息,这个消息存在在一个队列中;

“简单模式”:这种模式的消息只能被消费一次,也称为“点对点”模式(Point-to-Point),适用于消息只能被单个消费者处理的场景,并且也是最简单的一种模式。

Work Queue

这中模式叫做“工作队列模式”,从图上看就可以发现它是一对多模型,一个生产者,多个消费者,生产者产生的消息是由多个消费者共同消费的,也就是所消息的总量是不会变的,适合集群环境中做异步处理。比如一个订单服务,下单成功之后,订单消息就会发送到 RabbitMQ ,然后订单服务就会从 RabbitMQ 中获取订单详情并进行下一步的处理(在多个订单服务之间进行分配)。

Publish/Subscribe

这种叫“发布/订阅模式”,相比于“工作队列模式”只是在生产者和队列之间加一层 X (交换机)。

交换机(Exchange)的作用就是将生产者发送的消息按照一定的规则路由到一个或多个队列中,它只负责转发消息,不具备存储消息的能力,因此如果没有任何队列与 Exchange 绑定,或者没有符合路由规则的队列,那么消息就会丢失;RabbitMQ 的交换机一共有一下几种类型:

  • fanout:广播类型,将所有消息交给所有绑定到交换机的队列(发布/订阅模式);
  • direct:定向路由类型,把消息交给符合指定 routing key 的队列;
  • topic:通配符类型,把消息交给符合 routing pattern (路由模式)的队列;
  • headers:这个类型的交换机不依赖于路由键的匹配规则来路由消息,而是根据发送的消息内容中的 headers 属性进行匹配,但是这个交换机的性能较差使用频率也少;

这里还有两个概念就是 RountingKey 和 BindingKey:

  • RoutingKey:路由键,生产者将消息发送给交换器的时候会指定路由键,然后交换机就会根据这个路由键去决定下一步该怎么做;
  • BaindingKey:绑定键,通过 BindingKey 将交换机与队列关联起来,在绑定的时候一般会指定一个 BindingKey,这样 RabbitMQ 就可以根据 RoutingKey 和 BindingKey 来正确转发消息到指定的队列中;

Routing

这种叫“路由模式”,在“发布/订阅模式”的基础上,增加 RoutingKey,发布订阅模式就是直接把消息全部发送到与交换机关联的队列中,没有其他规则判断;路由模式下,Exchange 会根据用户传过来的 RoutingKey 和交换机与队列绑定的 BindingKey 进行比较,只有相同的话才会把消息发送到对应对立中,适合需要根据特定规则分发消息的场景;

Topics

这种叫做“通配符模式”,如果理解了上面的“路由模式”的话理解这个应该不难,它比“路由模式”更加灵活,Exchange 可以根据使用通配符的方式对消息路由到指定队列,比如要是 RoutintKey :test.orange.rabbit 的话,那么 Exchange 会将消息发送到 Q1 和 Q2 中;

RPC

RPC 通讯就是客户端去远程调用服务器的服务,在通讯过程中,没有生产者和消费者;客户端发送消息到一个指定的队列(request queue),并在消息属性中设置 replyTo 字段,这个字段的意思就是指定一个回调队列用于接收服务端的响应,然后服务端接收到请求之后,处理请求并发送响应消息到 replyTo 指定的回调队列中,客户端再再回调队列上等待响应消息,一旦收到消息,客户端就会检查消息的 correlationId 属性,以确保它是期望的响应,其中 correlationId 的值也是客户端定义的,然后服务端再根据约定好的规则进行检查;

Publisher Confirms

“发布确认模式”是 RabbitMQ 提供的一种确保消息可靠发送到 RabbitMQ 服务器的机制。在这中模式下,生产者可以等待 RabbitMQ 服务器的确认,确保消息已经被正确接收并处理:

  • 生产者将 channel 设置为 confirm 模式,发布的每一条消息都会获得一个唯一的ID,生产者可以将这些序列号与消息关联起来,用来跟踪消息的状态。
  • 当消息被 RabbitMQ 服务器接收并处理后,服务器会异步的向生产者发送一个确认 ACK 给生产者(包含消息的唯一ID),表明消息已经正确到达。

通过 Publisher Confirm 模式,可以避免消息丢失的场景,适合对数据安全性较高的场景如金融交易和订单处理等等。

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

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

相关文章

基于C++的多线程网络爬虫设计与实现(CURL + 线程池)

在当今大数据时代,网络爬虫作为数据采集的重要工具,其性能直接决定了数据获取的效率。传统的单线程爬虫在面对海量网页时往往力不从心,而多线程技术可以充分利用现代多核CPU的计算能力,显著提升爬取效率。本文将详细介绍如何使用C…

【日撸 Java 三百行】Day 11(顺序表(一))

目录 Day 11:顺序表(一) 一、关于顺序表 二、关于面向对象 三、代码模块分析 1. 顺序表的属性 2. 顺序表的方法 四、代码及测试 拓展: 小结 Day 11:顺序表(一) Task: 在《数…

软考 系统架构设计师系列知识点之杂项集萃(55)

接前一篇文章:软考 系统架构设计师系列知识点之杂项集萃(54) 第89题 某软件公司欲开发一个Windows平台上的公告板系统。在明确用户需求后,该公司的架构师决定采用Command模式实现该系统的界面显示部分,并设计UML类图如…

保持Word中插入图片的清晰度

大家有没有遇到这个问题,原本绘制的高清晰度图片,插入word后就变模糊了。先说原因,word默认启动了自动压缩图片功能,分享一下如何关闭这项功能,保持Word中插入图片的清晰度。 ①在Word文档中,点击左上角的…

Linux复习笔记(三) 网络服务配置(web)

遇到的问题,都有解决方案,希望我的博客能为你提供一点帮助。 二、网络服务配置 2.3 web服务配置 2.3.1通信基础:HTTP协议与C/S架构(了解) ​​HTTP协议的核心作用​​ Web服务基于HTTP/HTTPS协议实现客户端&#xff…

springboot旅游小程序-计算机毕业设计源码76696

目 录 摘要 1 绪论 1.1研究背景与意义 1.2研究现状 1.3论文结构与章节安排 2 基于微信小程序旅游网站系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系统…

uniapp自定义导航栏搭配插槽

<uni-nav-bar dark :fixed"true" shadow background-color"#007AFF" left-icon"left" left-text"返回" clickLeft"back"><view class"nav-bar-title">{{ navBarTitle }}</view><block v-slo…

MFC listctrl修改背景颜色

在 MFC 中修改 ListCtrl 控件的行背景颜色&#xff0c;需要通过自绘&#xff08;Owner-Draw&#xff09;机制实现。以下是详细的实现方法&#xff1a; 方法一&#xff1a;通过自绘&#xff08;Owner-Draw&#xff09;实现 步骤 1&#xff1a;启用自绘属性 在对话框设计器中选…

SpringBoot+Dubbo+Zookeeper实现分布式系统步骤

SpringBootDubboZookeeper实现分布式系统 一、分布式系统通俗解释二、环境准备&#xff08;详细版&#xff09;1. 软件版本2. 安装Zookeeper&#xff08;单机模式&#xff09; 三、完整项目结构&#xff08;带详细注释&#xff09;四、手把手代码实现步骤1&#xff1a;创建父工…

Linux进程10-有名管道概述、创建、读写操作、两个管道进程间通信、读写规律(只读、只写、读写区别)、设置阻塞/非阻塞

目录 1.有名管道 1.1概述 1.2与无名管道的差异 2.有名管道的创建 2.1 直接用shell命令创建有名管道 2.2使用mkfifo函数创建有名管道 3.有名管道读写操作 3.1单次读写 3.2多次读写 4.有名管道进程间通信 4.1回合制通信 4.2父子进程通信 5.有名管道读写规律&#xff…

精品可编辑PPT | 全面风险管理信息系统项目建设风控一体化标准方案

这份文档是一份全面风险管理信息系统项目建设风控一体化标准方案&#xff0c;涵盖了业务架构、功能方案、系统技术架构设计、项目实施及服务等多个方面的详细内容。方案旨在通过信息化手段提升企业全面风险管理工作水平&#xff0c;促进风险管理落地和内部控制规范化&#xff0…

YOLOv8网络结构

YOLOv8的网络结构由输入端(Input)、骨干网络(Backbone)、颈部网络(Neck)和检测头(Head)四部分组成。 YOLOv8的网络结构如下图所示&#xff1a; 在整个系统架构中&#xff0c;图像首先进入输入处理模块&#xff0c;该模块承担着图像预处理与数据增强的双重任务。接着&#xff0c…

笔记本电脑升级实战手册【扩展篇1】:flash id查询硬盘颗粒

文章目录 前言&#xff1a;一、硬盘颗粒介绍1、MLC&#xff08;Multi-Level Cell&#xff09;2、TLC&#xff08;Triple-Level Cell&#xff09;3、QLC&#xff08;Quad-Level Cell&#xff09; 二、硬盘与主控1、主控介绍2、主流主控厂家 三 、硬盘颗粒查询使用flash id工具查…

AutoDL租用服务器教程

在跑ai模型的时候&#xff0c;容易遇到算力不够的情况。此时便需要租用服务器。autodl是个较为便宜的服务器租用平台&#xff0c;h20仅需七点几元每小时。下面是简单的介绍。 打开网站AutoDL算力云 | 弹性、好用、省钱。租GPU就上AutoDL&#xff0c;并登录账号 登录后&#xff…

goner/otel 在Gone框架接入OpenTelemetry

文章目录 背景与意义快速上手&#xff1a;五步集成 OpenTelemetry运行效果展示代码详解与实践目录结构说明组件加载&#xff08;module.load.go&#xff09;业务组件示例&#xff08;your_component.go&#xff09;程序入口&#xff08;main.go&#xff09; 进阶用法与最佳实践…

杨校老师项目之基于SSM与JSP的鲜花销售系统-【成品设计含文档】

基于SSMJSP鲜花商城系统 随着电子商务的快速发展&#xff0c;鲜花在线销售已成为一种重要的消费模式。本文设计并实现了一个基于JSP技术的鲜花销售管理系统&#xff0c;采用B/S架构&#xff0c;使用SSM框架进行开发&#xff0c;并结合Maven进行项目依赖管理。系统分为前台用户模…

springboot集成langchain4j实现票务助手实战

前言 看此篇的前置知识为langchain4j整合springboot&#xff0c;以及springboot集成langchain4j记忆对话。 Function-Calls介绍 langchain4j 中的 Function Calls&#xff08;函数调用&#xff09;是一种让大语言模型&#xff08;LLM&#xff09;与外部工具&#xff08;如 A…

Feed流推送之订阅推送

分类 feed流分为TimeLine和智能排序&#xff0c;前者不对内容进行过滤&#xff0c;一般根据发布的时间来进行排序&#xff0c;一般用于好友动态或者推送关注的人的消息&#xff0c;而后者一般有着复杂的算法&#xff0c;可以根据算法智能地向目标用户推送内容&#xff0c;例如…

wordpress自学笔记 第四节 商城菜单的添加和修改美化

wordpress自学笔记 摘自 超详细WordPress搭建独立站商城教程-第四节 商城菜单的添加和修改美化&#xff0c;2025 WordPress搭建独立站商城#WordPress建站教程https://www.bilibili.com/video/BV1UwwgeuEkK?spm_id_from333.788.videopod.sections&vd_sourcea0af3bbc6b6d…

GPU L2 Cache一致性协议对科学计算的影响研究

点击 “AladdinEdu&#xff0c;同学们用得起的【H卡】算力平台”&#xff0c;H卡级别算力&#xff0c;按量计费&#xff0c;灵活弹性&#xff0c;顶级配置&#xff0c;学生专属优惠。 一、GPU缓存层级革命&#xff1a;从Volta到Hopper的演进图谱 1.1 架构级缓存策略对比 ‌Vo…