Rabbitmq 是一個功能很強大消息隊列系統(tǒng),使用起來可能不像某些 push 、pop 類型的隊列簡單(比如 redis 的list),Rabbitmq 支持消息的訂閱發(fā)布模式,方便大型系統(tǒng)各個服務(wù)組件之間解耦和通信。我們首先要了解一些基本概念。
1 2 3 4 5 |
Connection:即連接,?與你日常理解的連接沒有什么不同,比如?redis的連接,mysql的連接
Channel:即通道,?可以理解為一個連接中的子通道,想象一條高速公路,可能是?4車道的,也可能是?8?車道的,這些車道就是?Channel。
Exchange?:?交換機,如果你知道交換機設(shè)備的話,它的原理跟交換機是基本一樣的。
routingkey?:?用來綁定交換機和隊列的一個字符串。發(fā)送消息時需要指定?routingKey,?綁定了此?routingKey的隊列將接收到此消息。
queue隊列:?消息經(jīng)過交換機,最終發(fā)送到隊列中。
|
????發(fā)布消息:
新建文件send.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
<?php
$conn?=?[
???? // ?Rabbitmq?服務(wù)地址
???? 'host' ?=>? '127.0.0.1' ,
???? // ?Rabbitmq?服務(wù)端口
???? 'port' ?=>? '5672' ,
???? // ?Rabbitmq?帳號
???? 'login' ?=>? 'guest' ,
???? // ?Rabbitmq?密碼
???? 'password' ?=>? 'guest' ,
];
// 創(chuàng)建連接和channel
$conn?=?new?AMQPConnection($conn);
if (!$conn->connect())?{
???? die( "Cannot?connect?to?the?broker!n" );
}
$channel?=?new?AMQPChannel($conn);
// ?用來綁定交換機和隊列
$routingKey?=? 'key_1' ;
$ex?=?new?AMQPExchange($channel);
// ??交換機名稱
$exchangeName?=? 'ex1' ;
$ex->setName($exchangeName);
// ?設(shè)置交換機類型
$ex->setType(AMQP_EX_TYPE_DIRECT);
// ?設(shè)置交換機是否持久化消息
$ex->setFlags(AMQP_DURABLE);
for ($i=0;?$i<5;?++$i){
???? echo ?"Send?Message:" .$ex->publish( date ( 'H:i:s' ). "用戶" .$i. "注冊" ?,?$routingKey?). "n" ;
}
|
????消費消息:
新建文件receive.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
<?php
$conn?=?[
???? // ?Rabbitmq?服務(wù)地址
???? 'host' ?=>? '127.0.0.1' ,
???? // ?Rabbitmq?服務(wù)端口
???? 'port' ?=>? '5672' ,
???? // ?Rabbitmq?帳號
???? 'login' ?=>? 'guest' ,
???? // ?Rabbitmq?密碼
???? 'password' ?=>? 'guest' ,
];
// 創(chuàng)建連接和channel
$conn?=?new?AMQPConnection($conn);
if (!$conn->connect())?{
???? die( "Cannot?connect?to?the?broker!n" );
}
$channel?=?new?AMQPChannel($conn);
$exchangeName?=? 'ex1' ;
// 創(chuàng)建交換機
$ex?=?new?AMQPExchange($channel);
$ex->setName($exchangeName);
$ex->setType(AMQP_EX_TYPE_DIRECT);? //direct 類型
$ex->setFlags(AMQP_DURABLE);? // 持久化
// ??創(chuàng)建隊列
$queueName?=? 'queue1' ;
$q?=?new?AMQPQueue($channel);
$q->setName($queueName);
$q->setFlags(AMQP_DURABLE);
$q->declareQueue();
// ?用于綁定隊列和交換機,跟?send.php?中的一致。
$routingKey?=? 'key_1' ;
$q->bind($exchangeName,??$routingKey);
// 接收消息
$q->consume( function ?($envelope,?$queue)?{
???? $msg?=?$envelope->getBody();
???? echo ?$msg. "n" ;? // 處理消息
},?AMQP_AUTOACK);
$conn->disconnect();
|
????運行代碼:
啟動rabbitmq服務(wù)。
一開始隊列是不存在的,我們需要先啟動 consume.php 來初始化隊列,打開命令行頁面,運行
1 |
php?receive.php
|
啟動后 , php receive.php 將阻塞監(jiān)聽隊列消息。
然后打開新的命令行窗口運行:
1 |
php?send.php
|
然后在新 receive.php 所在的終端窗口將看到接收到的消息。
阿里企業(yè)郵箱、網(wǎng)易企業(yè)郵箱、新網(wǎng)企業(yè)郵箱
【標準版】400元/年/5用戶/無限容量
【外貿(mào)版】500元/年/5用戶/無限容量
其它服務(wù):網(wǎng)站建設(shè)、企業(yè)郵箱、數(shù)字證書ssl、400電話、
聯(lián)系方式:電話:13714666846 微信同號
【標準版】400元/年/5用戶/無限容量
【外貿(mào)版】500元/年/5用戶/無限容量
其它服務(wù):網(wǎng)站建設(shè)、企業(yè)郵箱、數(shù)字證書ssl、400電話、
聯(lián)系方式:電話:13714666846 微信同號
聲明:本站所有作品(圖文、音視頻)均由用戶自行上傳分享,或互聯(lián)網(wǎng)相關(guān)知識整合,僅供網(wǎng)友學(xué)習(xí)交流,若您的權(quán)利被侵害,請聯(lián)系 管理員 刪除。
本文鏈接:http://www.goalq.com.cn/article_32734.html