【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多平台发布

相关推荐
淘源码d12 小时前
【开源可商用】高并发智慧校园SaaS平台核心源码:Spring Boot 微服务 + 多终端协同
java·程序员·智慧校园·源码·二次开发·软件源码·电子班牌系统
程序员鱼皮1 天前
7个神级技巧,彻底去除网站的 AI 味儿!
计算机·ai·程序员·互联网·网站·编程经验
程序员鱼皮4 天前
Agent Skills 傻瓜式教程,26 年最火 AI 技术就这?
计算机·ai·程序员·agent·编程经验
黑客-雨6 天前
DeepSeek-V3.2深度拆解:开源模型逆袭,GPT-5迎来劲敌!
人工智能·程序员·大模型·知识图谱·agent·大模型教程·deepseek-v3.2
紫雾凌寒7 天前
【 HarmonyOS 高频题】2026 最新 ArkUI 开发与组件面试题
ui·华为·面试·程序员·职场发展·harmonyos·ark-ui
IT技术分享社区8 天前
GTID 结构升级 + JSON 视图强化,MySQL 9.6 创新版带来哪些性能提升?
数据库·程序员
小阿鑫8 天前
32岁程序员猝死背后,我的一些真实感受
前端·后端·程序员·代码人生
十年编程老舅9 天前
虾皮C++一面:C++四种类型转换详解
程序员·编程·c/c++
紫雾凌寒9 天前
【 HarmonyOS 面试题】2026 最新 ArkTS 语言基础面试题
华为·面试·程序员·华为云·职场发展·harmonyos·arkts
程序员鱼皮11 天前
20 个神级 AI 编程扩展,爽爆了!
ai·程序员·编程