PHP 或者 Yii2框架集成 RabbitMQ SDK
有!PHP 及 Yii2 都有成熟的 RabbitMQ SDK,核心依赖 php-amqplib(PHP 生态最常用的 RabbitMQ 客户端),Yii2 可通过扩展或直接集成该库使用。
一、核心 SDK:php-amqplib
- 官方地址:https://github.com/php-amqplib/php-amqplib
安装方式(Composer,PHP ≥ 7.4):
composer require php-amqplib/php-amqplib
二、Yii2 集成方式(2种方案)
方案1:直接使用 php-amqplib(简单灵活)
1. Yii2 生产者(发消息)
<?php
namespace app\controllers;
use Yii;
use yii\web\Controller;
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;
class RabbitmqProducerController extends Controller
{
public function actionSend()
{
// 连接RabbitMQ(本地默认配置,远程改host为服务器IP)
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();
// 声明队列(持久化)
$channel->queue_declare('test_queue', false, true, false, false);
// 消息内容
$messageBody = 'Yii2 发送的 RabbitMQ 消息';
$message = new AMQPMessage(
$messageBody,
['delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT] // 消息持久化
);
// 发送消息
$channel->basic_publish($message, '', 'test_queue');
echo "消息发送成功:{$messageBody}\n";
// 关闭连接
$channel->close();
$connection->close();
return '发送完成';
}
}2. Yii2 消费者(订阅+主动推送,长期运行)
<?php
namespace app\console\controllers;
use yii\console\Controller;
use PhpAmqpLib\Connection\AMQPStreamConnection;
class RabbitmqConsumerController extends Controller
{
public function actionListen()
{
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();
// 与生产者队列一致(持久化)
$channel->queue_declare('test_queue', false, true, false, false);
// 预取数:每次只推1条,处理完再推
$channel->basic_qos(null, 1, null);
// 消息回调(RabbitMQ主动推送时触发)
$callback = function ($msg) {
echo "收到推送消息:{$msg->body}\n";
$msg->ack(); // 手动确认消息
};
// 注册订阅(关闭自动确认)
$channel->basic_consume('test_queue', '', false, false, false, false, $callback);
echo "等待接收消息...(按Ctrl+C退出)\n";
// 客户端内部死循环,阻塞监听(无需手动写循环/休眠)
while ($channel->is_consuming()) {
$channel->wait(); // 阻塞等待消息,无消息时不占CPU
}
$channel->close();
$connection->close();
}
}方案2:Yii2 专用扩展(更贴合框架)
推荐使用 vladimir-yuldashev/yii2-queue 扩展,支持 RabbitMQ 作为驱动,整合了 Yii2 的日志、依赖注入等特性:
安装扩展:
composer require vladimir-yuldashev/yii2-queue配置
config/main.php:'components' => [ 'queue' => [ 'class' => \yii\queue\amqp\Queue::class, 'host' => 'localhost', 'port' => 5672, 'user' => 'guest', 'password' => 'guest', 'queueName' => 'test_queue', 'driver' => \yii\queue\amqp\ drivers\PhpAmqpLib::class, ], ],消费者运行(Yii2 命令行):
yii queue/listen
关键说明
- 消费者逻辑:
$channel->wait()或扩展的queue/listen会启动阻塞循环,无需手动写死循环或加休眠,无消息时几乎不耗CPU。 - 长期运行:Linux/macOS 用
nohup yii queue/listen &后台运行,Windows 用任务计划程序设开机自启。
版权属于:Joyber
本文链接:https://blog.qqvbc.com/default/1377.html
转载时须注明出处及本声明