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

相关推荐
花椒技术12 小时前
从7S到4S,我们如何系统性降低直播播放延迟
性能优化·程序员
程序员cxuan15 小时前
vibe coding 凉了,wish coding 来了
人工智能·后端·程序员
JustTest21 小时前
Mac mini初始安装软件记录
程序员
SimonKing21 小时前
轻量级富文本编辑器Quill,保姆级教程,5分钟快速上手
java·后端·程序员
文心快码BaiduComate2 天前
Comate搭载Kimi K2.6,长程13h!
前端·后端·程序员
图图玩ai2 天前
SSH 命令管理工具怎么选?从命令收藏到批量执行一次讲清
linux·nginx·docker·ai·程序员·ssh·可视化·gmssh·批量命令执行
SamDeepThinking2 天前
程序员懂业务,到底要懂到什么程度
后端·程序员·团队管理
盖世英雄酱581362 天前
java技术博主停更3个月了???
程序员
DyLatte2 天前
我做了个AI项目后才发现:会做事的人,正在输给会讲故事的人
前端·后端·程序员
SimonKing2 天前
别让你的代码裸奔!Spring Boot混淆全攻略(附配置)
java·后端·程序员