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

前言

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

原创文章,作者:FFBPO,如若转载,请注明出处:http://www.wangzhanshi.com/n/729.html

(0)
FFBPO的头像FFBPO
上一篇 2024年12月17日 17:53:18
下一篇 2024年12月17日 17:53:20

相关推荐

  • php安装phalcon扩展的步骤

    Phalcon 是开源、全功能栈、使用 C 扩展编写、针对高性能优化的 PHP 5 框架。 开发者不需要学习和使用 C 语言的功能, 因为所有的功能都以 PHP 类的方式暴露出来,…

    2025年1月1日
  • 使用PHP实现远程控制三路开关

    怎样用PHP语言实现远程控制三路开关呢? 本文描述了使用PHP语言调用HTTP接口,实现控制三路开关,三路开关可控制三路照明、排风扇等电器。 可选用产品:可根据实际场景需求,选择对…

    2024年12月17日
  • PHP7新功能及语法变化的示例分析

    标量类型声明 有两种模式: 强制 (默认) 和 严格模式。 现在可以使用下列类型参数(无论用强制模式还是严格模式): 字符串(string), 整数 (int), 浮点数 (flo…

    php 2025年1月1日
  • Ubuntu安装php7.3

    因为我的系统没有安装PHP,所以我打算为我的系统安装一个PHP7.3我们安装PHP7.3是为了使用Laravel5.7框架,所以我们要先确定Laravel5.7依赖的扩展:Lara…

    2025年1月1日
  • PHP7内核CGI与FastCGI的详细介绍

    CGI:是 Web Server 与 Web Application 之间数据交换的一种协议。FastCGI:同 CGI,是一种通信协议,但比 CGI 在效率上做了一些优化。 PH…

    2025年1月1日
  • PHP中比较两个对象的几种方式小结

    引言 在PHP中,比较两个对象并不是一件直接明了的事情,因为对象之间的比较通常依赖于它们的属性和状态,而这些属性和状态可能非常复杂且多样化。PHP提供了几种方式来比较对象,但每种方…

    php 2024年12月17日
  • ​nginx PHP常见错误有哪些

    nginx PHP常见错误 1、php7.0-fpm.sock权限不足: [crit] 3182#3182: *20 connect() to unix:/run/php/php7…

    php 2025年1月1日
  • PHP7实现OpenSSL DES-EDE-CBC加密和解密

    1. 条件约束 之前PHP5上常使用的mcrypt库在PHP7.1+上已经被移除,故我们采用openssl对数据进行加解密。 加密方式采用DES-EDE-CBC方式。 密钥填充方式…

    php 2025年1月1日
  • windows下安装php7的方法

    安装方法:1、官网上下载适合的php7安装包,然后解压,文件夹重命名为“php7”;2、打开php7文件夹,找到“php.ini-development”文件,重命名为“php.i…

    2025年1月1日
  • 什么是HHVM和PHP7以及PHP7和HHVM应该怎么选择

      PHP是最流行的用于web开发的脚本语言之一。PHP的最新版本,PHP7在性能上做了很大的优化。不过,PHP还有一个竞争对手HHVM(HipHopvirtualMachine)…

    php 2025年1月1日

发表回复

登录后才能评论