新聞中心
1.首先,添加相應(yīng)的源

在 ubuntu 16.04 下
echo "deb https://dl.bintray.com/rabbitmq/debian xenial main" | sudo tee /etc/apt/sources.list.d/bintray.rabbitmq.list
在 Ubuntu 17.10 下
echo "deb https://dl.bintray.com/rabbitmq/debian artful main" | sudo tee /etc/apt/sources.list.d/bintray.rabbitmq.list
2.配置公鑰
wget -O- https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add -
3. 更新并安裝服務(wù)
sudo apt-get update
sudo apt-get install rabbitmq-serve
安裝結(jié)束后默認(rèn)是運(yùn)行的
invoke-rc.d rabbitmq-server stop/start //可以運(yùn)行,該代碼進(jìn)行開(kāi)啟或關(guān)閉
開(kāi)啟頁(yè)面管理
rabbitmq-plugins enable rabbitmq_management
運(yùn)行該代碼即可訪問(wèn) http://localhost:15672/ 進(jìn)行頁(yè)面管理
以上,安裝RabbitMQ 服務(wù)就完成了。
RabbitMQ一些基本函數(shù)介紹
1.連接
// 連接服務(wù),獲取句柄
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$connection->isConnected() or die("Cannot connect to the broker!\n");
$channel = $connection->channel();
2.定義
//direct:在direct類(lèi)型的exchange中,只有這兩個(gè)routingkey完全相同,exchange才會(huì)選擇對(duì)應(yīng)的binging進(jìn)行消息路由。
//fanout:此exchange的路由規(guī)則很簡(jiǎn)單直接將消息路由到所有綁定的隊(duì)列中,無(wú)須對(duì)消息的routingkey進(jìn)行匹配操作。
//topic:此類(lèi)型exchange和上面的direct類(lèi)型差不多,這里的routingkey可以有通配符:'*','#' ,其中'*'表示匹配一個(gè)單詞,
// '#'則表示匹配沒(méi)有或者多個(gè)單詞,對(duì) key 進(jìn)行模式匹配,比如 ab* 可以傳遞到所有 ab* 的 queue
// headers : 不常用
$channel->exchange_declare('demo', 'direct'); //聲明交換機(jī),相當(dāng)于定義規(guī)則
//passive: 消極處理, 判斷是否存在隊(duì)列,存在則返回,不存在直接拋出 PhpAmqpLib\Exception\AMQPProtocolChannelException 異常
//durable:true、false true:在服務(wù)器重啟時(shí),能夠存活
//exclusive :是否為當(dāng)前連接的專(zhuān)用隊(duì)列,在連接斷開(kāi)后,會(huì)自動(dòng)刪除該隊(duì)列,生產(chǎn)環(huán)境中應(yīng)該很少用到吧。
//autodelete:當(dāng)沒(méi)有任何消費(fèi)者使用時(shí),自動(dòng)刪除該隊(duì)列
//nowait : 相當(dāng)于一個(gè)async版的聲明隊(duì)列,可以看到是沒(méi)有返回的。調(diào)完方法就結(jié)束。也不等隊(duì)列創(chuàng)建結(jié)果
//auto_delete: 當(dāng)所有消費(fèi)客戶端連接斷開(kāi)后,是否自動(dòng)刪除隊(duì)列
//arguments: 附加參數(shù),規(guī)則設(shè)置
$channel->queue_declare('kzae', false, false, false, false);
//隊(duì)列綁定交換機(jī)
$channel->queue_bind('hello','amq.direct', 'bbb');
3.發(fā)送
//mandatory標(biāo)志告訴服務(wù)器至少將該消息route到一個(gè)隊(duì)列中,否則將消息返還給生產(chǎn)者;
//immediate標(biāo)志告訴服務(wù)器如果該消息關(guān)聯(lián)的queue上有消費(fèi)者,則馬上將消息投遞給它,如果所有queue都沒(méi)有消費(fèi)者,
//直接把消息返還給生產(chǎn)者,不用將消息入隊(duì)列等待消費(fèi)者了
$channel->basic_publish($msg, 'amq.direct', 'bbb');
4.接收
//采用 no-ack 的方式進(jìn)行確認(rèn),也就是說(shuō),每次 Consumer 接到數(shù)據(jù)后,不管是否處理完成,RabbitMQ Server 會(huì)立即把這個(gè) Message 標(biāo)記為完成,然后從 Queue 中刪除
$channel->basic_consume('hello', '', false, false, false, false, $callback);
5.回調(diào)
$callback = function(PhpAmqpLib\Message\AMQPMessage $msg) {
echo " [x] Received ", $msg->body, "\n";
//delivery_info['channel']: PhpAmqpLib\Channel\AMQPChannel
var_dump($msg->delivery_info);
$msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']); //確認(rèn)ack
};
6. 結(jié)束
$channel->close();
$connection->close();
網(wǎng)站名稱(chēng):Ubuntu16.04配置RabbitMQ服務(wù)
文章位置:http://m.5511xx.com/article/copjcdj.html


咨詢(xún)
建站咨詢(xún)
