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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM