AMQP扩展安装
在PHP上安装RabbitMQ之前,先安装PHP的扩展amqp,在安装amqp之前,先查看自己的PHP版本
首先根据PHP的版本选择amqp的版本,再次要下载稳定版本的amqp。我的PHP是5.6.25的,所以选择1.4.0版本的amqp。下载地址:https://pecl.php.net/package/amqp
然后根据PHP的版本,线程安全是否激活,多少位的,来选择下载哪个版本:我的PHP是5.6版本的,线程安全的,x86 32位的,所以选择这个:
解压后:
将php_amqp.dll文件放到 php 目录下的ext文件夹下面
然后,再将 rabbitmq.1.dll 文件放到 php 根目录下:
然后,在 php.ini 里面(包括 apache 和 php 里面的,共 2 个),最后添加(强烈建议最后,避免出错):
[amqp]
extension=php_amqp.dll
然后,在 apache 里 httpd.conf 的最后添加:
LoadFile “E:/phpStudy/PHPTutorial/php/php-7.2.1-nts/rabbitmq.4.dll”
然后重启 apache ,查看 phpinfo();
记住上面的账号密码,后面登录后台会用到。 安装好 PHP 的 amqp 扩展后,接下来,我们安装erlang。 为什么要安装erlang呢? 因为 rabbitmq 服务端代码是使用并发式语言Erlang编写的,所以在安装 rabbitmq 的前提是安装Erlang。 下载地址:http://www.erlang.org/downloads
根据自己的电脑系统的位数,选择下载哪个:我的电脑系统是64位的
下载好之后:
双击,安装,点next,
安装好之后,要配置一下环境变量: 此电脑-->鼠标右键“属性”-->高级系统设置-->环境变量-->“新建”系统环境变量
变量名:ERLANG_HOME
变量值就是erlang的安装地址,点击确定。
然后,双击系统变量的path
点击“新建”,将%ERLANG_HOME%\bin 加入到path中,并确定,保存。
最后 windows键+R键,输入 cmd,再输入erl,看到版本号,就说明erlang安装成功了。
如果显示不了,首先确保环境变量设置好了并保存好了。然后再双击打开一下安装好的Erlang,然后再次操作,应该就可以了。
安装好erlang之后,就开始正式安装 RabbitMQ了。 下载地址:
双击安装,下一步,与erlang安装相同。 安装好 RabbitMQ后,再安装RabbitMQ-Plugins。打开命令行,cd切换到rabbitmq 的 sbin目录。 我的目录是:D:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.8\sbin 然后在后面输入rabbitmq-plugins enable rabbitmq_management命令进行安装。
安装好之后,就可以登录后台了。然后,打开网址:http://localhost:15672 用上面的账号和密码登陆进去
下面开始测试: 强烈建议在php官方手册里学习 php扩展AMQP代理,如何创建队列 在测试之前,我要介绍一下php-amqplib 这个封装好的类库。 首先安装Composer 可以参考https://www.runoob.com/w3cnote/composer-install-and-usage.html,主要是用来安装php-amqplib 这个类库。
然后打开cmd,cd到项目目录下,composer require php-amqplib/php-amqplib进行安装。
然后等上几分钟,安装好了之后,在项目里会有vendor这个文件夹,里面就是php-amqplib这个类库。
然后在项目里创建编写两个php程序,一个send.php:
<?php require_once(__DIR__ . './vendor/autoload.php'); use PhpAmqpLib\Connection\AMQPStreamConnection; use PhpAmqpLib\Message\AMQPMessage; $connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest'); $channel = $connection->channel(); $channel->queue_declare('hello',false,false,false,false); $msg =new AMQPMessage('Hello World!'); $channel->basic_publish($msg, '', 'hello'); echo " [x] Sent 'Hello World!'\n"; $channel->close(); $connection->close();
一个recv.php:
<?php require_once(__DIR__ . './vendor/autoload.php'); use PhpAmqpLib\Connection\AMQPStreamConnection; $connection =new AMQPStreamConnection('localhost', 5672, 'guest', 'guest'); $channel = $connection->channel(); $channel->queue_declare('hello',false,false,false,false); echo ' [*] Waiting for messages. To exit press CTRL+C', "\n"; $callback = function($msg){ echo " [x] Received ",$msg->body,"\n"; }; $channel->basic_consume('hello', '',false,true,false,false, $callback); while(count($channel->callbacks)) { $channel->wait(); } $channel->close(); $connection->close();
然后打开cmd,cd到项目目录下,运行两个 php 程序。