消費者:接收消息
邏輯:
創建連接-->創建channel-->創建交換機-->創建隊列-->綁定交換機/隊列/路由鍵-->接收消息
<?php /************************************* * PHP amqp(RabbitMQ) Demo - consumer * Author: Linvo * Date: 2012/7/30 *************************************/ //配置信息 $conn_args = array( 'host' => '192.168.1.93', '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); //持久化 echo "Exchange Status:".$ex->declare()."\n"; //創建隊列 $q = new AMQPQueue($channel); $q->setName($q_name); $q->setFlags(AMQP_DURABLE); //持久化 echo "Message Total:".$q->declare()."\n"; //綁定交換機與隊列,並指定路由鍵 echo 'Queue Bind: '.$q->bind($e_name, $k_route)."\n"; //阻塞模式接收消息 echo "Message:\n"; while(True){ $q->consume('processMessage'); //$q->consume('processMessage', AMQP_AUTOACK); //自動ACK應答 } $conn->disconnect(); /** * 消費回調函數 * 處理消息 */ function processMessage($envelope, $queue) { $msg = $envelope->getBody(); echo $msg."\n"; //處理消息 $queue->ack($envelope->getDeliveryTag()); //手動發送ACK應答 }
生產者:發送消息
邏輯:
創建連接-->創建channel-->創建交換機對象-->發送消息 Continue reading
Posted in 系統架構 | Tagged amqp, RabbitMQ
windows下安裝rabbitmq的php擴展amqp(原創)
從php官方下載相應的版本http://pecl.php.net/package/amqp,我這里使用的是1.4.0版本(http://pecl.php.net/package/amqp/1.4.0/windows)
根據當前使用的php版本選擇相應的擴展dll,下載后是一個壓縮包,里面有兩個dll擴展(php_amqp.dll和rabbitmq.1.dll)。
我的環境是64位的,php5.5.12.所以使用的是http://windows.php.net/downloads/pecl/releases/amqp/1.4.0/php_amqp-1.4.0-5.5-ts-vc11-x64.zip
1.將php_amqp.dll放在php的ext目錄里,然后修改php.ini文件,在文件的最后面添加兩行
1
2
|
[amqp]
extension=php_amqp.dll
|
2.將rabbitmq.1.dll文件放在php的根目錄里(也就是ext目錄的父級目錄),然后修改apache的httpd.con文件,文件尾部添加一行
1
|
LoadFile
"d:/wamp/bin/php/php5.5.12/rabbitmq.1.dll"
|
這里的路徑根據情況修改,我這里使用的wampserver軟件。
3.重啟apache,並查看phpinfo信息。只要看到amqp 字樣即可。