PHP之RabbitMQ安装篇(二)-windows下安装
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 的最后添加:
Include "${INSTALL_DIR}/alias/*"
LoadFile "${INSTALL_DIR}/bin/php/php5.6.25/rabbitmq.1.dll"
#Include "D:/wamp/alias/*"
#LoadFile "D:/wamp/bin/php/php5.6.25/rabbitmq.1.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代理,如何创建队列,地址:http://php.net/manual/pl/class.amqpconnection.php
在测试之前,我要介绍一下php-amqplib 这个封装好的类库。
我安装的wamp的集成开发环境。
首先在你的项目目录下添加composer.json文件,主要是用来安装php-amqplib 这个类库。
然后打开cmd,cd到项目目录下,composer install 进行安装。
然后等上几分钟,安装好了之后,在项目里会有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 程序。
消费者将会打印 生产者通过 RabbitMQ 发送的消息。receive.php 将会一直运行,等待接收消息(使用 Ctrl+C停止),因此尝试从另一个终端运行send.php。