|
目录
前言
今天我们来做个小试验,用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,执行如下命令。4、检查服务是否正常运行,执行如下命令。返回如下内容,说明服务已正常启动,正在运行。
5、如果有服务启动失败,可以使用如下命令排查问题。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扩展,内容如下。4、检查配置是否成功,执行如下命令,有返回说明已完成安装。- /usr/local/php/bin/php -m|grep amqp
复制代码 5、重启PHP服务, 重启Web服务器或PHP-FPM服务以加载新安装的AMQP扩展。
6、至此,php的amqp扩展已完成安装。
三、测试验证
1、进入test1项目目录,执行如下命令。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项目容器看到消费者的输出,类似如下截图。
7、至此,php和rabbitmq实现消息队列的功能已测试验证OK。
总结
用PHP和RabbitMQ实现消息队列功能,其实也不复杂,主要有以下几个步骤。
1、安装RabbitMQ。
2、安装PHP的AMQP扩展。
3、编写生产者、消费者进行验证。
上面的代码只是做个简单的示例,如果运用到实际的项目当中需要做配置化、封装。
以上就是使用PHP和RabbitMQ实现消息队列功能的详细内容,更多关于PHP RabbitMQ消息队列的资料请关注脚本之家其它相关文章!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|