当前位置:首页 > PHP

php实现rabbitmq

2026-01-29 15:00:53PHP

PHP 实现 RabbitMQ 的基本步骤

安装 RabbitMQ 和 PHP 扩展

确保 RabbitMQ 服务已安装并运行。在 PHP 中,使用 php-amqplib 库来操作 RabbitMQ。通过 Composer 安装:

composer require php-amqplib/php-amqplib

连接到 RabbitMQ

创建一个连接和通道,用于后续的消息发送和接收:

require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;

$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();

发送消息到队列

声明一个队列并发送消息:

$channel->queue_declare('hello', false, false, false, false);
$msg = new PhpAmqpLib\Message\AMQPMessage('Hello World!');
$channel->basic_publish($msg, '', 'hello');
echo " [x] Sent 'Hello World!'\n";

接收消息

声明队列并设置消费者回调函数:

$callback = function ($msg) {
    echo ' [x] Received ', $msg->body, "\n";
};
$channel->basic_consume('hello', '', false, true, false, false, $callback);

while ($channel->is_consuming()) {
    $channel->wait();
}

关闭连接

完成操作后关闭通道和连接:

$channel->close();
$connection->close();

实现工作队列(Worker Queue)

生产者

发送耗时任务消息到队列:

$channel->queue_declare('task_queue', false, true, false, false);
$data = implode(' ', array_slice($argv, 1));
$msg = new PhpAmqpLib\Message\AMQPMessage(
    $data,
    ['delivery_mode' => PhpAmqpLib\Message\AMQPMessage::DELIVERY_MODE_PERSISTENT]
);
$channel->basic_publish($msg, '', 'task_queue');

消费者

处理任务并确认消息:

$callback = function ($msg) {
    echo ' [x] Received ', $msg->body, "\n";
    sleep(substr_count($msg->body, '.'));
    echo " [x] Done\n";
    $msg->ack();
};
$channel->basic_qos(null, 1, null);
$channel->basic_consume('task_queue', '', false, false, false, false, $callback);

实现发布/订阅模式

生产者

发送消息到交换机:

$channel->exchange_declare('logs', 'fanout', false, false, false);
$msg = new PhpAmqpLib\Message\AMQPMessage($data);
$channel->basic_publish($msg, 'logs');

消费者

绑定队列到交换机并接收消息:

$channel->exchange_declare('logs', 'fanout', false, false, false);
list($queue_name, ,) = $channel->queue_declare("", false, false, true, false);
$channel->queue_bind($queue_name, 'logs');
$callback = function ($msg) {
    echo ' [x] ', $msg->body, "\n";
};
$channel->basic_consume($queue_name, '', false, true, false, false, $callback);

实现路由(Routing)

生产者

发送带路由键的消息:

$channel->exchange_declare('direct_logs', 'direct', false, false, false);
$severity = isset($argv[1]) && !empty($argv[1]) ? $argv[1] : 'info';
$msg = new PhpAmqpLib\Message\AMQPMessage($data);
$channel->basic_publish($msg, 'direct_logs', $severity);

消费者

绑定队列到特定路由键:

php实现rabbitmq

$channel->exchange_declare('direct_logs', 'direct', false, false, false);
$severities = array_slice($argv, 1);
foreach ($severities as $severity) {
    $channel->queue_bind($queue_name, 'direct_logs', $severity);
}

注意事项

  • 确保 RabbitMQ 服务正常运行。
  • 处理消息时考虑消息持久化和手动确认。
  • 根据业务需求选择合适的交换机和队列模式。
  • 错误处理和日志记录是生产环境中的重要部分。

标签: phprabbitmq
分享给朋友:

相关文章

php实现登录

php实现登录

PHP 登录功能实现 数据库连接与用户表创建 创建一个数据库连接文件 db.php,用于管理数据库连接。MySQL 示例代码如下: <?php $host = 'localhost'; $db…

php实现注册

php实现注册

注册功能实现步骤 数据库准备 创建用户表,包含字段如id、username、password、email等。示例SQL: CREATE TABLE users ( id INT AUTO_I…

php实现mvc

php实现mvc

PHP 实现 MVC 架构 MVC(Model-View-Controller)是一种常用的软件设计模式,将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller…

php https实现

php https实现

PHP 中实现 HTTPS 的方法 在 PHP 中实现 HTTPS 主要通过配置服务器和编写代码来确保通信的安全性。以下是几种常见的方法: 配置服务器支持 HTTPS 确保服务器已安装 SSL/T…

php 实现聊天功能

php 实现聊天功能

PHP 实现聊天功能的方法 使用 WebSocket 和 Ratchet 库 WebSocket 是实现实时聊天的理想选择。Ratchet 是一个 PHP 库,用于处理 WebSocket 连接。…

php实现发帖

php实现发帖

PHP 实现发帖功能 要在 PHP 中实现发帖功能,通常需要结合数据库操作(如 MySQL)和前端表单提交。以下是实现发帖功能的关键步骤: 数据库表设计 创建一个帖子表(posts)存储发帖内容,基…