RabbitMQ tutorial - Work Queues | RabbitMQ

RabbitMQ tutorial - Work Queues | RabbitMQ

RabbitMQ tutorial - Work Queues | RabbitMQ

访问网站
我的收藏186 次访问更新于 a month ago反馈
RabbitMQ tutorial - Work Queues | RabbitMQ screenshot

详细介绍

简介

RabbitMQ 官方教程之“Work Queues(工作队列)”,使用 PHP 语言并通过 php-amqplib 客户端库进行演示。本教程基于第一个“Hello World”教程,介绍如何创建一个工作队列,用于将耗时的任务分发给多个后台工作进程(worker)处理,从而避免资源密集型任务阻塞主流程。

前提条件:教程假定 RabbitMQ 已安装并运行在 localhost 的标准端口(5672)。若使用不同的主机、端口或凭据,需相应调整连接设置。

主要功能

工作队列(任务队列)模型

  • 核心思想:不立即执行资源密集型任务并等待其完成,而是将任务封装为消息发送至队列,由后台 worker 进程取出并执行,实现任务延迟处理与多 worker 间共享。
  • 适用于 Web 应用等无法在短 HTTP 请求窗口内处理复杂任务的场景。

示例程序准备

  • 修改此前 send.phpnew_task.php,支持从命令行接收任意字符串作为消息并发布到队列 hello
  • 修改 receive.phpworker.php,以消息体中“.”的数量模拟任务耗时(每个点睡眠 1 秒)。

轮询分发(Round-robin dispatching)

  • 默认情况下,RabbitMQ 按顺序将每条消息发送给下一个消费者,平均每个消费者获得相同数量消息。
  • 可同时运行多个 worker.php 实例,轻松横向扩展以提升并行处理能力。

消息确认(Message acknowledgment)

  • 为防止 worker 在处理中途终止导致消息丢失,RabbitMQ 支持消费者回送确认(ack)。
  • 若消费者未发送 ack 即断开(通道/连接关闭或 TCP 丢失),RabbitMQ 会将消息重新入队并投递给其他在线消费者。
  • 消费者交付确认默认超时为 30 分钟,用于检测异常。

适用场景

  • 在 Web 应用中需异步处理复杂任务(如图片缩放、PDF 渲染等),避免阻塞 HTTP 请求。
  • 需要通过增加 worker 实例来线性扩展任务处理能力的后台作业系统。
  • PHP 技术栈下使用 RabbitMQ 实现基础任务队列与可靠消息消费的入门学习。