基于RabbitMQ消息队列的PHP实现

在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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咆哮的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值