当前位置: 首页 > news >正文

php连接rabbitmq例子

首先确保安装好了Rabbitmq服务器。

1.新建一个空白php项目,安装php客户端库:

composer require php-amqplib/php-amqplib

2.生产者

然后添加生产者代码 (producer.php)

<?php
require_once __DIR__ . '/vendor/autoload.php';use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;// 创建到RabbitMQ服务器的连接[1,2](@ref)
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();// 声明一个队列,如果不存在则创建[1,2](@ref)
$queueName = 'hello';
$channel->queue_declare($queueName, false, false, false, false);// 创建消息内容
$data = "Hello RabbitMQ! 时间: " . date('Y-m-d H:i:s');
$msg = new AMQPMessage($data);// 发送消息到队列[1,2](@ref)
$channel->basic_publish($msg, '', $queueName);
echo " [x] 发送消息: '$data'\n";// 关闭连接[1,2](@ref)
$channel->close();
$connection->close();

运行生产者:php producer.php

3.消费者

添加consumer.php。 消费者监听并处理队列中的消息:

<?php
require_once __DIR__ . '/vendor/autoload.php';use PhpAmqpLib\Connection\AMQPStreamConnection;// 创建到RabbitMQ服务器的连接[1,2](@ref)
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();// 声明同一个队列[1,2](@ref)
$queueName = 'hello';
$channel->queue_declare($queueName, false, false, false, false);echo " [*] 等待消息中. 按 CTRL+C 退出\n";// 定义处理消息的回调函数[1,2](@ref)
$callback = function ($msg) {echo " [x] 收到消息: ", $msg->body, "\n";
};// 开始消费队列中的消息[1,2](@ref)
$channel->basic_consume($queueName, '', false, true, false, false, $callback);// 持续监听消息[1,2](@ref)
while ($channel->is_consuming()) {$channel->wait();
}// 关闭连接(通常不会执行到这里)[1,2](@ref)
$channel->close();
$connection->close();

运行消费者:php consumer.php

4. 运行说明

  1. 确保 RabbitMQ 服务已启动
  2. ​先运行消费者​​:在终端执行 php consumer.php,它会持续运行并等待消息
  3. ​再运行生产者​​:另开终端执行 php producer.php,发送消息
  4. 观察消费者终端,会立即显示收到的消息

    

也可以在rabbitmq管理页面发送消息: 

如果没有消费者,就是不运行consumer.php, 发布消息之后,可以获取到消息 Get Message(s),

否则就是 Queue is empty。

5. 关键点说明

  • 队列声明​​:生产者和消费者都要声明相同的队列
  • •​​消息确认​​:本例使用自动确认模式(true参数),消息被接收后自动从队列删除
  • •​​持久化​​:如需消息持久化,需设置队列和消息的durable属性
  • •​​连接参数​​:根据实际修改主机、端口、用户名和密码

这是一个最基础的 RabbitMQ 使用示例。在实际项目中,你可能需要添加错误处理、消息持久化、手动确认等更多功能。

http://www.xdnf.cn/news/1396279.html

相关文章:

  • 【序列晋升】21 Spring Cloud Gateway 云原生网关演进之路
  • 卷积神经网络项目:基于CNN实现心律失常(ECG)的小颗粒度分类系统
  • HAProxy 负载均衡全解析:从基础部署、负载策略到会话保持及性能优化指南
  • docker命令(二)
  • 现状摸底:如何快速诊断企业的“数字化健康度”?
  • PCIe 6.0 TLP深度解析:从结构设计到错误处理的全链路机制
  • 算法题(194):字典树
  • 从0到1玩转 Google SEO
  • Suno-API - OpenI
  • “FAQ + AI”智能助手全栈实现方案
  • Python从入门到高手9.4节-基于字典树的敏感词识别算法
  • 8月29日星期五今日早报简报微语报早读
  • 轮廓周长,面积,外接圆,外接矩形近似轮廓和模板匹配和argparse模块实现代码参数的动态配置
  • 【C++】掌握类模板:多参数实战技巧
  • 基于Net海洋生态环境保护系统的设计与实现(代码+数据库+LW)
  • MYSQL速通(2/5)
  • 小杰机器视觉(six)——模板匹配
  • UCIE Specification详解(十)
  • TypeScript: Symbol.iterator属性
  • WINTRUST!_GetMessage函数分析之CRYPT32!CryptSIPGetSignedDataMsg函数的作用是得到nt5inf.cat的信息
  • AI的“科学革命”:Karpathy吹响号角,从“经院哲学”走向“实验科学”
  • 基于STM32单片机的智能温室控制声光报警系统设计
  • Geocodify 的 API
  • CD71.【C++ Dev】二叉树的三种非递归遍历方式
  • 网络编程 反射【详解】 | Java 学习日志 | 第 15 天
  • 2025牛客暑期多校训练营4 G Ghost in the Parentheses 题解记录
  • Day17 Docker学习
  • uac播放与录制
  • 论文阅读:arixv 2025 WideSearch: Benchmarking Agentic Broad Info-Seeking
  • React Three Fiber