当前位置: 首页 > news >正文

RabbitMQ 工作模式

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.xdnf.cn/news/405055.html

相关文章:

  • JWT的介绍与在Fastapi框架中的应用
  • 单片机-STM32部分:13-1、蜂鸣器
  • 常用依赖文件库
  • kubernetes服务自动伸缩-VPA
  • ESP32开发入门(九):HTTP服务器开发实践
  • Day22打卡-复习
  • 【K8S学习之探针】详细了解就绪探针 readinessProbe 和存活探针 livenessProbe 的配置
  • Kotlin 异步初始化值
  • JVM类加载
  • 生产环境怎么移除console
  • WebSocket集成方案对比
  • 中华春节符号全球推广委员会——“金文形意书《易经》成果展”研学之旅
  • 【Spark】使用Spark集群搭建Yarn模式
  • Docker-配置私有仓库(Harbor)
  • mapreduce-wordcount程序2
  • PostgreSQL 中的序列(Sequence)
  • 力扣HOT100之二叉树:226. 翻转二叉树
  • WSL-Ubuntu 中安装 Git LFS 记录
  • 网络编程epoll和udp
  • 华为防火墙配置与网络协议实战指南:从基础到高阶排查
  • 破局智算瓶颈:400G光模块如何重构AI时代的网络神经脉络
  • 大模型的实践应用41-天气预测与分析决策系统:Qwen3(32B)+langchain框架+MCP(大模型上下文协议)+RAG+传统算法
  • RabbitMQ高并发秒杀、抢购系统、预约系统底层实现逻辑
  • ArcGIS+InVEST+RUSLE:水土流失模拟与流域管理的高效解决方案;水土保持专题地图制作
  • 《Python星球日记》 第63天:文本方向综合项目(新闻分类)
  • 危化品安全员职业发展方向的优劣对比
  • 人工智能时代:解锁职业新身份,从“认证师”到“工程师”的进阶之路
  • 图灵爬虫练习平台第九题js逆向
  • 电力系统静态安全因素与动态安全因素的区别及具体分类
  • matlab计算天线的近场和远场