RabbitMQ系列(二)基本概念之Publisher

news/2025/3/1 5:20:26/

在 RabbitMQ 中,Publisher(发布者) 是负责向 RabbitMQ 服务器发送消息的客户端角色,通常被称为“生产者”。以下是其核心功能与工作机制的详细解析:


一、核心定义与作用

  1. 消息发送者
    Publisher 将消息发送到 RabbitMQ 的 Exchange(交换机),而非直接发送到队列。Exchange 根据消息的 Routing Key(路由键) 和绑定规则将消息路由到对应的队列(Queue)。

  2. 解耦生产与消费
    生产者仅需关注消息的发送逻辑,无需知道消费者如何消费消息,实现了系统间的异步通信。


二、Publisher 的核心职责

  1. 指定消息路由规则
    • 发送消息时需指定 Routing Key 和 Exchange,例如:
      rabbitTemplate.convertAndSend("exchange_name", "routing_key", message);
      ......
    • 消息的最终路由路径由 Exchange 类型来决定。
  2. 保障消息可靠性
    • Publisher Confirm 机制:通过异步回调确认消息是否成功到达到 Broker,以避免消息会丢失。
    • Return 机制:当消息无法路由到任何队列(queue)时,触发回调,通知生产者处理。

三、Publisher 的工作流程

  1. 创建连接与信道
    • 通过 AMQP 协议与 RabbitMQ Broker 建立 TCP 连接,并创建轻量级的信道(Channel)进行通信。
  2. 发送消息
    • 消息包含 Payload(消息体) 和 Headers(元数据),如消息ID、优先级等。
  3. 处理确认与异常
    • ConfirmCallback:接收 RabbitMQ节点的 ACK/NACK 回执(如消息持久化到磁盘后的确认)。
    • ReturnCallback:处理无法路由的消息。

四、可靠性配置建议

  1. 开启 Confirm 模式
    spring:rabbitmq:publisher-confirm-type: correlated  # 异步回调确认 publisher-returns: true             # 开启 Return 机制 
    ``` ```  
    
  2. 消息持久化
    • 设置 deliveryMode=2,确保消息在 RabbitMQ 重启后不丢失。
  3. 异步处理确认
    • 避免同步阻塞等待回执,可以提升性能。

五、典型应用场景

  1. 事件驱动架构
    例如支付成功后,Publisher 发送“支付成功”事件到 Exchange,触发订单、物流等服务的异步处理。

  2. 削峰填谷
    突发流量下,Publisher 将请求缓冲到队列中,消费者按处理能力消费。


六、注意事项

  • 性能消耗:Confirm 机制会增加 RabbitMQ节点的负载,非高可靠性场景可以考虑关闭他。
  • 错误处理:需监听 NACK 和 Return 回调,记录日志或重试发送

http://www.ppmy.cn/news/1575691.html

相关文章

鸿蒙Next如何自定义标签页

前言 项目需求是展示标签,标签的个数不定,一行展示不行就自行换行。但是,使用鸿蒙原生的 Grid 后发现特别的难看。然后就想着自定义控件。找了官方文档,发现2个重要的实现方法,但是,官方的demo中讲的很少&…

PHP操作redis

目录 一、安装PHP的redis扩展 1、linux下安装php的redis扩展 2、windows下安装php的redis扩展 二、PHP操作redis 1、面向过程操作redis 2、面向对象操作redis 一、安装PHP的redis扩展 1)PHP的redis扩展有2个,分别是phpredis和predis扩展&#xff…

Android Audio实战——音频相关基础概念(附)

Android Audio 开发其实就是媒体源数字化的过程,通过将声波波形信号通过 ADC 转换成计算机支持的二进制的过程叫做音频采样 (Audio Sampling)。采样 (Sampling) 的核心是把连续的模拟信号转换成离散的数字信号。 一、声音的属性 1、响度 (Loudness) 响度是指人类可以感知到的…

Metal 学习笔记六:坐标空间

要在网格上轻松找到一个点,您需要一个坐标系。例如,如果网格恰好是您的 iPhone 15 屏幕,则中心点可能是 x:197、y:426。但是,该点可能会有所不同,具体取决于它所处的空间。 在上一章中&#xf…

Nuxt.js 3【详解】服务器 Server

Nuxt.js 是一个全栈框架,可以在一个项目中,同时完成前端和后端的开发。 服务器架构 Nuxt.js 的服务端由 Nitro 实现,Nitro 由基于 H3 实现。 Nitro 官网 https://nitro.build/guideH3 官网 https://h3.unjs.io/guide 接口路由 基于文件目录自…

JAVA面试常见题_基础部分_Mysql调优

性能监控 使用show profile查询剖析工具,可以指定具体的type 此工具默认是禁用的,可以通过服务器变量在绘画级别动态的修改 set profiling1; 当设置完成之后,在服务器上执行的所有语句,都会测量其耗费的时间和其他一些查询执行状…

C++-第十二章: AVL树

目录 第一节:AVL树的特征 第二节:实现思路 2-1.插入 2-1-1.右单旋 2-1-2.左单旋 2-1-3.左右双旋 2-1-4.右左双旋 2-1-5.总结 2-2.删除 第三节:代码实现 3-1.Node类 3-2.AVLTree类 3-2-1.Insert函数 3-2-2.Height函数 3-2-3.Balance函数 3-…

【超详细】神经网络的可视化解释

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…