使用PHP和RabbitMQ实现消息队列功能

2024-04-19 0 589
目录
  • 前言
  • 一、安装RabbitMQ
  • 二、安装PHP的AMQP扩展
  • 三、测试验证
  • 总结

前言

今天我们来做个小试验,用PHP和RabbitMQ实现消息队列功能。

前期准备,需要安装好docker、docker-compose的运行环境。

使用docker部署php服务的详细步骤_docker_悠久资源网 (jb51.net)

一、安装RabbitMQ

1、创建相关目录,执行如下命令。

mkdir -p /docker/rabbitmq/data
cd /docker/rabbitmq

2、编写yaml文件,内容如下;version替换成自己的docker-compose版本。

vim docker-compose.yaml
version: \’2.2.2\’
services:
rabbitmq:
image: rabbitmq
hostname: rabbitmq
container_name: rabbitmq
ports:
– \”5672:5672\”
– \”15672:15672\”
volumes:
– ./data:/var/lib/rabbitmq
networks:
– mynet

networks:
mynet:
name: mynet
driver: bridge

3、启动rabbitmq,执行如下命令。

docker-compose up -d

4、检查服务是否正常运行,执行如下命令。

docker-compose ps -a

返回如下内容,说明服务已正常启动,正在运行。

使用PHP和RabbitMQ实现消息队列功能

5、如果有服务启动失败,可以使用如下命令排查问题。

docker logs rabbitmq

6、至此,rabbitmq安全完成并且已正常运行。

二、安装PHP的AMQP扩展

1、进入test1项目容器,执行如下命令。

docker exec -ti test1 /bin/sh

2、下载AMQP扩展并且完成安装,执行如下命令。

wget https://pecl.php.net/get/amqp-2.1.2.tgz
tar -zxvf amqp-2.1.2.tgz
cd amqp-2.1.2
/usr/local/php/bin/phpize
./configure –with-php-config=/usr/local/php/bin/php-config
make && make install

3、修改php.ini配置,增加amqp扩展,内容如下。

extension=amqp.so

4、检查配置是否成功,执行如下命令,有返回说明已完成安装。

/usr/local/php/bin/php -m|grep amqp

5、重启PHP服务,重启Web服务器或PHP-FPM服务以加载新安装的AMQP扩展。

6、至此,php的amqp扩展已完成安装。

三、测试验证

1、进入test1项目目录,执行如下命令。

cd /docker/test1/html/

2、编写生产者,代码内容如下。

vim producer.php
<?php
// 创建连接到RabbitMQ服务器的连接
$connection = new AMQPConnection(
[
\’host\’ => \’rabbitmq\’,
\’port\’ => 5672,
\’username\’ => \’guest\’,
\’password\’ => \’guest\’
]
);
$connection->connect();

// 创建一个频道(channel)
$channel = new AMQPChannel($connection);

// 声明一个交换机(exchange)
$exchange = new AMQPExchange($channel);
$exchange->setName(\’exchange_name\’);
$exchange->setType(AMQP_EX_TYPE_DIRECT); // 直接交换机类型
$exchange->declareExchange();

// 声明一个队列
$queue = new AMQPQueue($channel);
$queue->setName(\’queue_name\’);
$queue->declareQueue();

// 绑定交换机到队列
$queue->bind(\’exchange_name\’, \’routing_key\’);

// 发送一条消息
$messageBody = \’Hello, RabbitMQ!\’.(!empty($_GET[\’msg\’]) ? $_GET[\’msg\’] : \’\’);
$exchange->publish($messageBody, \’routing_key\’);

// 关闭连接
$channel->close();
$connection->disconnect();

3、编写消费者,代码内容如下。

vim consumer.php
<?php
// 创建连接到RabbitMQ服务器的连接
$connection = new AMQPConnection(
[
\’host\’ => \’rabbitmq\’,
\’port\’ => 5672,
\’username\’ => \’guest\’,
\’password\’ => \’guest\’
]
);
$connection->connect();

// 创建一个频道(channel)
$channel = new AMQPChannel($connection);

// 声明一个交换机(exchange)
$exchange = new AMQPExchange($channel);
$exchange->setName(\’exchange_name\’);
$exchange->setType(AMQP_EX_TYPE_DIRECT); // 直接交换机类型
$exchange->declareExchange();

// 声明一个队列
$queue = new AMQPQueue($channel);
$queue->setName(\’queue_name\’);
$queue->declareQueue();

// 绑定交换机到队列
$queue->bind(\’exchange_name\’, \’routing_key\’);

// 开始消费消息
$queue->consume(function (AMQPEnvelope $envelope, AMQPQueue $queue) {
if ($envelope->getBody()) {
echo \”Received message: \”, $envelope->getBody(), \”\\n\”;
}
}, AMQP_AUTOACK); // 如果设置为AMQP_AUTOACK,消息一旦收到就被认为已确认,否则需要手动确认

// 关闭连接
$channel->close();
$connection->disconnect();

4、进入test1项目容器,监控消费者,执行如下命令。

/usr/local/php/bin/php /usr/local/nginx/html/consumer.php

5、在宿主机发起一个生产者请求,执行如下命令。

curl \”http://127.0.0.1:8081/producer.php?msg=max\”

6、正常情况下,会在test1项目容器看到消费者的输出,类似如下截图。

使用PHP和RabbitMQ实现消息队列功能

7、至此,php和rabbitmq实现消息队列的功能已测试验证OK。

总结

用PHP和RabbitMQ实现消息队列功能,其实也不复杂,主要有以下几个步骤。

1、安装RabbitMQ。

2、安装PHP的AMQP扩展。

3、编写生产者、消费者进行验证。

上面的代码只是做个简单的示例,如果运用到实际的项目当中需要做配置化、封装。

以上就是使用PHP和RabbitMQ实现消息队列功能的详细内容,更多关于PHP RabbitMQ消息队列的资料请关注悠久资源网其它相关文章!

您可能感兴趣的文章:

  • 以PHP代码为实例详解RabbitMQ消息队列中间件的6种模式
  • PHP+RabbitMQ实现消息队列的完整代码
  • 使用PHP访问RabbitMQ消息队列的方法示例
  • PHP实现RabbitMQ消息列队的示例代码

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 PHP 使用PHP和RabbitMQ实现消息队列功能 https://www.u-9.cn/biancheng/php/188165.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务