thinkphp5.1.41需通过composer引入php-amqplib扩展并封装生产者/消费者类,配置统一连接参数,控制器调用send发送消息,自定义命令行命令启动常驻消费者进程,配合supervisor守护。

ThinkPHP5.1.41 本身不内置 RabbitMQ 支持,需通过扩展 + 自定义逻辑集成。核心是两步:PHP 层接入消息队列、框架内组织生产/消费流程。下面分关键环节说明。
安装 php-amqplib 扩展
这是最轻量、最常用的 PHP AMQP 客户端库,兼容 RabbitMQ 3.x+:
- 在项目根目录执行:
composer require php-amqplib/php-amqplib - 确认 PHP 已启用
sockets和json扩展(RabbitMQ 连接和消息序列化必需) - 无需编译安装扩展,纯 Composer 包,引入后即可用
PhpAmqpLib\Connection\AMQPStreamConnection
封装 RabbitMQ 生产者与消费者类
建议放在 application/common/library 下,例如:
-
RabbitMQProducer.php:提供send($queue, $data)方法,自动序列化数组为 JSON,推入指定队列 -
RabbitMQConsumer.php:提供listen($queue, $callback),支持阻塞监听并执行回调(如发邮件、写日志) - 连接参数(host/port/vhost/user/pass)统一从
config/queue.php加载,便于多环境切换
在 TP5.1 中调用生产者(比如发邮件)
以「用户注册后异步发欢迎邮件」为例:
- 控制器中不再直接调用 Mail 类,而是:
(new \app\common\library\RabbitMQProducer)->send('email_queue', ['to' => $email, 'template' => 'welcome']); - 消息体保持简单、可序列化,避免传对象或闭包
- 可配合 TP5.1 的
think\exception\Handle全局捕获异常,失败时记录日志或重试
运行消费者进程(常驻后台)
TP5.1 没有内置命令行消费者,需手动创建指令并用进程管理工具守护:
- 新建命令行文件
application/command/ConsumeEmail.php,继承think\console\Command,handle()中调用RabbitMQConsumer::listen(...) - 测试运行:
php think consume_email - 生产环境用 Supervisor 管理:配置
autostart=true、autorestart=true,防止崩溃退出
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











