在RabbitMQ官方提供的客户端列表中,我们看到了对于PHP语言的支持,
我们先使用第一个“php-amqplib”试一试,因为他是一个纯php语言实现的客户端,因此不需要我们安装RabbitMQ客户端的扩展,
但是这个"php-qmqplib"也需要PHP的基本扩展的支持,比如“sockets”,“bcmath”,“curl”等等,
这里我们使用就是“php-amqplib-2.9.2.zip”这个版本!关于RabbitMQ的详细php实现,可以参考其官网的介绍,
https://www.rabbitmq.com/getstarted.html
我们只是简单的介绍消息的发布和接收,类似于“hello,word”的入门演示。
首先,我们先发送消息,代码如下:
require_once __DIR__ . '/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;
// 创建一个 RabbitMQ 的 socket 连接
$connection = new AMQPStreamConnection('localhost', 5672, 'richie', '123456');
// 创建一个信道
$channel = $connection->channel();
$channel->queue_declare('hello', false, false, false, false);
// 创建一个消息
$msg = new AMQPMessage('Hello Richie!');
// 发送消息
$channel->basic_publish($msg, '', 'hello');
echo "Sent 'Hello Richie!'";
// 关闭 channel 和 connection
$channel->close();
$connection->close();
再上一篇搭建RabbitMQ服务器端环境的时候,我们已经建立了一个账号,我们就使用这个账号连接服务器端。
然后我们创建一个消息“hello,Richie”,并发送到队列里面,执行结果如下:
同时,我们登录服务器端的Web管理插件页面查看,
可以看到我们有一个名称是"hello"的队列,该队列里面,有一个消息。
下面我们来接受消息,也就是取出来,receive.php
require_once __DIR__ . '/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;
// 建立连接
$connection = new AMQPStreamConnection('localhost', 5672, 'richie', '123456');
// 获取信道
$channel = $connection->channel();
$channel->queue_declare('hello', false, false, false, false);
// 消息回调处理函数
$callback = function($msg) {
echo "Received " . $msg->body;
};
// 消费消息
$channel->basic_consume('hello', '', false, true, false, false, $callback);
// 监听消息,一有消息,立马就处理
while(count($channel->callbacks)) {
$channel->wait();
break;
}
// 关闭channel 和 connection
$channel->close();
$connection->close();
我们使用一个while循环来获取消息,并通过$callback来处理消息,
因为我们只是演示,队列里面只有一个消息,处理完就break退出循环了。
执行结果如下:
我们再去查看服务器端,
队列还在,但是消息没有了。具体代码已经上传 : 消息队列演示代码.rar