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%in 加入到path中,并确定,保存。

技术图片

最后 windows键+R键,输入 cmd,再输入erl,看到版本号,就说明erlang安装成功了。

技术图片

如果显示不了,首先确保环境变量设置好了并保存好了。然后再双击打开一下安装好的Erlang,然后再次操作,应该就可以了。

技术图片

技术图片

安装好erlang之后,就开始正式安装 RabbitMQ了。
下载地址:

技术图片

技术图片

双击安装,下一步,与erlang安装相同。
安装好 RabbitMQ后,再安装RabbitMQ-Plugins。打开命令行,cd切换到rabbitmq 的 sbin目录。
我的目录是:D:Program FilesRabbitMQ Server abbitmq_server-3.7.8sbin
然后在后面输入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 PhpAmqpLibConnectionAMQPStreamConnection;
    use PhpAmqpLibMessageAMQPMessage;


    $connection = new AMQPStreamConnection(‘localhost‘, 5672, ‘guest‘, ‘guest‘);
    $channel = $connection->channel();
    $channel->queue_declare(‘hello‘, falsefalsefalsefalse);
    $msg = new AMQPMessage(‘Hello World!‘);
    $channel->basic_publish($msg, ‘‘, ‘hello‘);
    echo " [x] Sent ‘Hello World!‘ ";

    $channel->close();
    $connection->close();

一个recv.php:

<?php
require_once 
__DIR__ . ‘/vendor/autoload.php‘;

use PhpAmqpLibConnectionAMQPStreamConnection;


$connection = new AMQPStreamConnection(‘localhost‘, 5672, ‘guest‘, ‘guest‘);
$channel = $connection->channel();
$channel->queue_declare(‘hello‘, falsefalsefalsefalse);
echo ‘ [*] Waiting for messages. To exit press CTRL+C‘, " ";
$callback = function($msg) {
    echo " [x] Received ", $msg->body, " ";
};
$channel->basic_consume(‘hello‘, ‘‘, falsetruefalsefalse, $callback);
while(count($channel->callbacks)) {
    $channel->wait();
}

$channel->close();
$connection->close();

 

然后打开cmd,cd到项目目录下,运行两个 php 程序。

技术图片

消费者将会打印 生产者通过 RabbitMQ 发送的消息。receive.php 将会一直运行,等待接收消息(使用 Ctrl+C停止),因此尝试从另一个终端运行send.php。