生活随笔
收集整理的這篇文章主要介紹了
安装rabbitmq和php扩展
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、安裝rabbitmq服務端
1、安裝erlang
試了幾次erlang官方的包安裝后,在安裝rabbitmq時都報錯要依賴R14B02,干脆使用rabbitmq官方提供的包:https://github.com/rabbitmq/erlang-rpm 點擊下載,終于不報錯了。
rabbitmq官方提供安裝包的步驟: 1、下載后進入安裝包,直接輸入命令:make 2、安裝過程需要3分鐘左右,編譯過程中需要用到rpm-build和autoconf,沒有安裝的需要安裝。安裝完成后,會在目錄RPMS/x86_64/下找到erlang的安裝包,rpm -ivh *** 安裝即可。
2、安裝rabbitmq
我直接使用rabbitmq 的rpm安裝包。如果這時還報錯socat找不到,下載socat 的安裝包安裝即可。 注意:如果使用yum安裝socat,需安裝epel。
3、測試rabbitmq是否安裝成功
service rabbitmq-server start #開啟rabbitmq
service rabbitmq-server status #查看rabbitmq狀態
二、安裝rabbitmq的php擴展
1、安裝擴展依賴庫#####
注意:擴展是C寫的,由于C與RabbitMQ通信一般需要依賴rabbitmq-c庫(也就是librabbitmq),所以編譯擴展前需要先裝依賴庫。不同版本的擴展,對php版本和librabbitmq兼容性不一樣。 rabbitmq-c依賴庫下載: https://github.com/alanxz/rabbitmq-c/archive/v0.8.0.tar.gz
mkdir build && cd build # 這一步是在rabbitmq-c的根目錄下創建一個build子目錄
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/librabbitmq .. # 這一步是讓cmake根據../CMakeList.txt,即rabbitmq-c的根目錄下的CMakeList.txt創建Makefile文件,Makefile文件會被創建到build目錄中
cmake --build . # 這一步是真正的build rabbitmq-c庫的,注意,不要漏掉結尾的點 '.'
make
make install
2、安裝amqp擴展
amqp擴展下載: http://pecl.php.net/get/amqp-1.9.0.tgz
tar zvxf amqp-1.9.0.tgz #解壓
cd amqp-1.9.9 #打開目錄./configure --with-php-config=/usr/local/php56/bin/php-config --with-amqp --with-librabbitmq-dir=/usr/local/librabbitmqmake
make install
修改php.ini
extension=amqp.so #extension_dir自己定義
重啟php-fpm
service php-fpm restart #重啟
如無意外,則可以在phpinfo頁面看到如下所示:
圖一
三、監控及代碼測試
啟動rabbitmq監控頁面
rabbitmq-plugins enable rabbitmq_management #啟動監控頁面插件
生產者代碼 (創建一個rabbit_publisher.php的文件) 創建連接-->創建channel-->創建交換機對象-->發送消息
<?php
//配置信息
$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);//消息內容
$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, $k_route)."\n";
}
//$channel->commitTransaction(); //提交事務$conn->disconnect();
消費者代碼(創建一個rabbit_consumer.php的文件) 創建連接-->創建channel-->創建交換機-->創建隊列-->綁定交換機/隊列/路由鍵-->接收消息
<?php
//配置信息
$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應答
}/*** 消費回調函數* 處理消息*/
function processMessage($envelope, $queue) {var_dump($envelope->getRoutingKey);$msg = $envelope->getBody();echo $msg."\n"; //處理消息
}
需要注意的地方是: queue對象有兩個方法可用于取消息:consume和get。前者是阻塞的,無消息時會被掛起,適合循環中使用; 后者則是非阻塞的,取消息時有則取,無則返回false。 測試截圖 運行消費者:
?
運行生產者,發消息:
?
消費者接收到消息:
?
執行兩個文件,再打開RabbitMQ的管理中心 http://127.0.0.1:15672/
作者:無極生兩儀 鏈接:https://www.jianshu.com/p/65490900a937 來源:簡書 簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權并注明出處。
總結
以上是生活随笔 為你收集整理的安装rabbitmq和php扩展 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。