使用PHP和RabbitMQ实现消息队列功能
发布: 来源: PHP粉丝网 添加日期:2024-04-28 15:39:24 浏览: 评论:0
这篇文章主要介绍了如何使用PHP和RabbitMQ实现消息队列功能,文中通过示例代码介绍的非常详细,对大家学习或者使用PHP具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧。
今天我们来做个小试验,用PHP和RabbitMQ实现消息队列功能。
前期准备,需要安装好docker、docker-compose的运行环境。
一、安装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
返回如下内容,说明服务已正常启动,正在运行。
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
- // 创建连接到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!'.(!emptyempty($_GET['msg']) ? $_GET['msg'] : '');
- $exchange->publish($messageBody, 'routing_key');
- // 关闭连接
- $channel->close();
- $connection->disconnect();
3、编写消费者,代码内容如下。
- vim consumer.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项目容器看到消费者的输出,类似如下截图。
7、至此,php和rabbitmq实现消息队列的功能已测试验证OK。
总结
用PHP和RabbitMQ实现消息队列功能,其实也不复杂,主要有以下几个步骤。
1、安装RabbitMQ。
2、安装PHP的AMQP扩展。
3、编写生产者、消费者进行验证。
上面的代码只是做个简单的示例,如果运用到实际的项目当中需要做配置化、封装。
Tags: RabbitMQ PHP消息队列
相关文章
- ·PHP和RabbitMQ实现消息队列的完整代码(2020-02-04)
- ·什么是RabbitMQ?RabbitMQ的简单介绍(2020-02-08)
- ·PHP基于rabbitmq操作类的生产者和消费者功能示例(2021-10-01)
- ·PHP+RabbitMQ实现消息队列的完整代码(2021-11-13)
- ·如何用RabbitMQ和Swoole实现一个异步任务系统(2022-05-01)
- ·如何基于Hyperf实现RabbitMQ+WebSocket消息推送(2022-06-12)
- ·基于 Hyperf + RabbitMQ + WebSocket 实现消息推送(2022-06-19)
- ·以PHP代码为实例详解RabbitMQ消息队列中间件的6种模式(2023-07-12)
- ·PHP使用enqueue/amqp-lib实现rabbitmq任务处理(2024-04-28)
- ·PHP memcache实现消息队列实例(2014-08-27)
- ·PHP+memcache实现消息队列案例分享(2021-01-10)
- ·PHP消息队列用法实例分析(2021-07-09)
- ·PHP消息队列实现及应用详解【队列处理订单系统和配送系统】(2021-11-22)
- ·PHP使用ActiveMQ实现消息队列的方法详解(2021-11-24)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)