PHP消息隊列rabbitmq——windows

一.安裝拓展

  1. 由於RabbitMQ是由erlang語言實現的,因此先要安裝erlang環境php

    erlang和rabbitmq_server直接下載安裝包安裝;html

  2. amqp拓展下載要選好版本;根據系統選擇32位仍是64位的。查看phpInfo中:Thread Safety:若是是enabled就選ts版。disabled選擇nts版。linux

    安裝拓展方法:apache

    • 下載解壓;將php_amqp.dll複製到php/ext;
    • php.int(我配置了php7.1環境,修改的是phpForApache.ini)中加上extension=php_amqp.dll;
    • 複製rabbitmq.4.dll到php目錄下;
    • 在apache配置文件httpd.conf中添加一行

    LoadFile "${INSTALL_DIR}/bin/php/php7.1.9/rabbitmq.4.dll"windows

    注意:${INSTALL_DIR}是代替wampserver安裝目錄,/bin/php/php7.1.9/rabbitmq.4.dll是rabbitmq.4.dll的位置;php7

  3. 重啓wampserver,phpinfo()中既能夠看到amqp拓展了;測試

2、rabbitMQ demo

  1. 新建一個生產者 publisher.php
<?php
//配置信息
$conn_args = array(
    'host' => 'localhost',
    'port' => '5672',
    'login' => 'guest',
    'password' => 'guest',
    'vhost'=>'/'
);
$e_name = 'e_linvo'; //交換機名
//$q_name = 'q_linvo'; //無需隊列名
$k_route = 'key_1'; //路由key

//建立鏈接和channel
$conn = new AMQPConnection($conn_args);
if (!$conn->connect()) {
    die("Cannot connect to the broker!\n");
}
$channel = new AMQPChannel($conn);

//消息內容
$message = "TEST MESSAGE! 測試消息!";

//建立交換機對象
$ex = new AMQPExchange($channel);
$ex->setName($e_name);

//發送消息
//$channel->startTransaction(); //開始事務
for($i=0; $i<5; ++$i){
    echo "Send Message:".$ex->publish($message.$i, $k_route)."\n";
}
//$channel->commitTransaction(); //提交事務

$conn->disconnect();
  1. 消費者consumer.php
<?php
//配置信息
$conn_args = array(
    'host' => 'localhost',
    'port' => '5672',
    'login' => 'guest',
    'password' => 'guest',
    'vhost'=>'/'
);
$e_name = 'e_linvo'; //交換機名
$q_name = 'q_linvo'; //隊列名
$k_route = 'key_1'; //路由key

//建立鏈接和channel
$conn = new AMQPConnection($conn_args);
if (!$conn->connect()) {
    die("Cannot connect to the broker!\n");
}
$channel = new AMQPChannel($conn);

//建立交換機
$ex = new AMQPExchange($channel);
$ex->setName($e_name);
$ex->setType(AMQP_EX_TYPE_DIRECT); //direct類型
$ex->setFlags(AMQP_DURABLE); //持久化
$ex->declareExchange();

//建立隊列
$q = new AMQPQueue($channel);
$q->setName($q_name);
$q->setFlags(AMQP_DURABLE); //持久化
$q->declareQueue();

//綁定交換機與隊列,並指定路由鍵
$q->bind($e_name, $k_route);

//阻塞模式接收消息

while(True){
    $arr = $q->get();
    $res = $q->ack($arr->getDeliveryTag());
    $msg = $arr->getBody();
    var_dump($msg);
}
$conn->disconnect();
三.運行demo
  1. 運行publisher.php文件,便可看到生產者將消息發送的rabbitMQ,從rabbitMQ的管理界面中也能夠看到有消息進來,隊列一直處於等待狀態。 運行結果:

rabbitMQ管理界面:.net

  1. 運行消費者處理這些隊列,便可看處處理結果。以及在rabbitMQ管理界面中能夠看到等待的隊列被處理:

運行結果:3d

管理界面:code

至此,一個基本的rabbitMQ消息對列demo基本完成了。可是在真是的生產環境上不少時候須要消費者做爲首位進程一直監聽隊列,有消息進來就要實時處理。因此這裏爲了更加直觀的的感覺這樣的過程,咱們在linux環境下運行一下消息隊列。

詳情請看下一篇《PHP消息隊列rabbitmq——linux環境》

相關文章
相關標籤/搜索