本文目錄一覽:
php rabbitmq 哪個擴展最好
Linux 上面一般需要自己編譯
注意:擴展是C寫的,由於C與RabbitMQ通信一般需要依賴rabbitmq-c庫(也就是librabbitmq),所以編譯擴展前需要先裝依賴庫。不同版本的擴展,對php版本和librabbitmq兼容性不一樣。下面這個版本是經過本人測試的,可以兼容的。
rabbitmq-c -0.4.1 , amqp 擴展 1.4.0 , php 5.5.9
一鍵安裝腳本:
[cpp] view plain copy
#!/bin/bash
set -e
#install cmake
yum -y install cmake
#download rabbitmq-c
wget
php的amqp應該怎樣使用
高級消息隊列協議(AMQP)是一個異步消息傳遞所使用的應用層協議規範。作為線路層協議,而不是API(例如JMS),AMQP 客戶端能夠無視消息的來源任意發送和接受信息。現在,已經有相當一部分不同平台的服務器和客戶端可以投入使用。
1、相關概念說明
Broker:簡單來說就是消息隊列服務器實體。
Exchange:消息交換機,它指定消息按什麼規則,路由到哪個隊列。
Queue:消息隊列載體,每個消息都會被投入到一個或多個隊列。
Binding:綁定,它的作用就是把exchange和queue按照路由規則綁定起來。
Routing Key:路由關鍵字,exchange根據這個關鍵字進行消息投遞。
vhost:虛擬主機,一個broker里可以開設多個vhost,用作不同用戶的權限分離。
producer:消息生產者,就是投遞消息的程序。
consumer:消息消費者,就是接受消息的程序。
channel:消息通道,在客戶端的每個連接里,可建立多個channel,每個channel代表一個會話任務。
2、使用流程
即 Client – AMQP server – Client
左邊的Client向右邊的Client發送消息,流程:
1, 獲取Conection
2, 獲取Channel
3, 定義Exchange,Queue
4, 使用一個RoutingKey將Queue Binding到一個Exchange上
5, 通過指定一個Exchange和一個RoutingKey來將消息發送到對應的Queue上,
6, 接收方在接收時也是獲取connection,接着獲取channel,然後指定一個Queue直接到它關心的Queue上取消息,它對Exchange,RoutingKey及如何binding都不關心,到對應的Queue上去取消息就OK了
3、AMQP例子
生產方
?php
$conn_args = array(‘host’ =’localhost’, ‘port’ = 5672, ‘login’ = ‘guest’, ‘password’ = ‘guest’, ‘vhost’ = ‘/’);
$conn = new AMQPConnection($conn_args);
if ($conn-connect()) {
echo “Established a connection to the broker \n”;
}else {
echo “Cannot connect to the broker \n “;
}
$e_name=’ex_test5′;//交換機名橫
$q_name=’q_test5′;//隊列名稱
$r_key=’key_test1′;
//你的消息
$message = json_encode(array(‘Hello World!’));
//創建channel
$channel = new AMQPChannel($conn);
//創建exchange
$ex = new AMQPExchange($channel);
$ex-setName($e_name);//創建名字
$ex-setType(AMQP_EX_TYPE_DIRECT);
$ex-setFlags(AMQP_DURABLE | AMQP_AUTODELETE);
echo “exchange status:”.$ex-declare();
echo “\n”;
//創建隊列
$q = new AMQPQueue($channel);
//設置隊列名字 如果不存在則添加
$q-setName($q_name);
$q-setFlags(AMQP_DURABLE | AMQP_AUTODELETE);
echo “queue status: “.$q-declare();
echo “\n”;
echo ‘queue bind: ‘.$q-bind($e_name,$r_key);//將你的隊列綁定到routingKey
echo “\n”;
$channel-startTransaction();
echo “send: “.$ex-publish($message, $r_key); //將你的消息通過制定routingKey發送
$channel-commitTransaction();
$conn-disconnect();
?
消費方
?php
$conn_args = array(‘host’ =’localhost’, ‘port’ = 5672, ‘login’ = ‘guest’, ‘password’ = ‘guest’, ‘vhost’ = ‘/’);
//$q_name=’q_test6′;//隊列名稱
$q_name=$_GET[‘q’];//隊列名稱
$conn = new AMQPConnection($conn_args);
$conn-connect();
$channel = new AMQPChannel($conn);
$q = new AMQPQueue($channel);
$q-setName($q_name);
$q-setFlags(AMQP_DURABLE | AMQP_AUTODELETE);
while($a=$q-declare())
{
echo “queue status: “.$a;
echo “==========\n”;
$messages = $q-get(AMQP_AUTOACK);
print_r($messages-getBody());
echo “\n”;
}
$conn-disconnect();
?
PHP7 不支持amqp嗎
第三方擴展需要升級支持到PHP7才能正常安裝,PHP7內核與PHP5內核間有很大區別,擴展庫都需要進行適配才能正常編譯。建議你關注amqp開發者提供的一些信息和開發進度。
PHP7 是支持的
用這個源碼包試試
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/232179.html