【PHP进阶】Rabbitmq的实际使用

RabbitMQ是一个流行的消息队列中间件,它提供了可靠的消息传递机制。在使用RabbitMQ时,有几个重要的概念需要了解:

消息队列(Message Queue):RabbitMQ中的核心概念之一。它是消息的缓冲区,用于存储发送者发送的消息,以便等待接收者处理。

消息生产者(Producer):负责向消息队列中发送消息的应用程序或组件。

消息消费者(Consumer):从消息队列中接收并处理消息的应用程序或组件。

交换机(Exchange):用于将消息路由到一个或多个消息队列的组件。交换机根据规则(如路由键)将消息发送到相应的队列。

队列绑定(Queue Binding):将队列与交换机关联的过程。绑定定义了交换机如何将消息路由到与之绑定的队列。

路由键(Routing Key):用于将消息从交换机路由到特定队列的关键字。交换机根据消息的路由键将消息发送到一个或多个与之匹配的队列。

确认(Acknowledgment):指消费者收到消息并已确认处理完成的机制。RabbitMQ支持确认机制,确保消息被正确地处理。

持久化(Durability):指消息队列和消息是否持久化存储到磁盘上,以防止消息丢失。持久化确保在RabbitMQ服务器重启时不会丢失消息。

PHP实际运用:

我们来创建一个简单的 PHP 实例来使用 RabbitMQ。首先,你需要确保已经安装了 RabbitMQ 服务器,并且在 PHP 中安装了 RabbitMQ 扩展。然后,我们将创建一个简单的生产者和消费者来发送和接收消息。

步骤 1: 安装 RabbitMQ PHP 扩展

你可以使用 pecl 来安装 RabbitMQ PHP 扩展:

bash 复制代码
pecl install amqp

步骤 2: 编写生产者

php 复制代码
<?php
require_once __DIR__ . '/vendor/autoload.php'; // 载入 Composer 自动加载器

use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;

// 连接到 RabbitMQ 服务器
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();

// 声明队列
$channel->queue_declare('hello', false, false, false, false);

// 创建消息
$msg = new AMQPMessage('Hello World!');

// 发送消息到队列
$channel->basic_publish($msg, '', 'hello');

echo " [x] Sent 'Hello World!'\n";

// 关闭连接
$channel->close();
$connection->close();
?>

步骤 3: 编写消费者

php 复制代码
<?php
require_once __DIR__ . '/vendor/autoload.php'; // 载入 Composer 自动加载器

use PhpAmqpLib\Connection\AMQPStreamConnection;

// 连接到 RabbitMQ 服务器
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();

// 声明队列
$channel->queue_declare('hello', false, false, false, false);

echo " [*] Waiting for messages. To exit press CTRL+C\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();
?>

这就是一个简单的 RabbitMQ 示例。生产者发送消息到名为 "hello" 的队列,而消费者监听这个队列并打印出收到的消息.

我们基于这些基础代码就能做业务啦。不同的业务会有些许差别。

本文由mdnice多平台发布

相关推荐
掉头发的王富贵4 小时前
【2026.3.28深圳腾讯云线下活动分享】我用龙虾3分钟完成了文章的抓取,写作,发布一条龙
程序员·线下活动·腾讯
阿里嘎多学长5 小时前
2026-03-27 GitHub 热点项目精选
开发语言·程序员·github·代码托管
我要改名叫嘟嘟5 小时前
一个大龄程序员的地铁日记(第8期),给予我影响,帮助我改变的书
程序员
陈随易6 小时前
农村程序员聊五险一金
前端·后端·程序员
badhope7 小时前
如何将小厂Java项目包装出高并发架构演进感
python·程序员·ipython
程序员鱼皮7 小时前
Claude 绝密模型泄露!Sora 关停、AI 工具链遭投毒… 本周最炸 AI 热点汇总
科技·ai·程序员·编程·ai编程
CodeSheep8 小时前
JetBrains又一知名软件宣布倒下,五味杂陈
前端·后端·程序员
SimonKing8 小时前
GitHub热榜1k星影视壳(OuonnkiTV)遇上AI影视源
java·后端·程序员
MobotStone10 小时前
我的 AI 代码清理方法论:从原型到生产,只需 5 步
算法·程序员·架构
北鸟南游1 天前
使用AI智能体的MCP和SKILL
人工智能·程序员·前端框架