当前位置: 代码网 > it编程>编程语言>Php > 使用PHP和RabbitMQ实现消息队列功能

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

2024年05月15日 Php 我要评论
前言今天我们来做个小试验,用php和rabbitmq实现消息队列功能。前期准备,需要安装好docker、docker-compose的运行环境。一、安装rabbitmq1、创建相关目录,执行如下命令。

前言

今天我们来做个小试验,用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
<?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消息队列的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com