最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

以PHP代碼為實例詳解RabbitMQ消息隊列中間件的6種模式

 更新時間:2023年05月10日 10:08:10   作者:stark張宇  
這篇文章主要介紹了以PHP代碼為實例詳解RabbitMQ消息隊列中間件的6種模式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

RabbitMQ 6種工作模式

對RabbitMQ 6種工作模式(簡單模式、工作模式、訂閱模式、路由模式、主題模式、RPC模式)進(jìn)行場景和參數(shù)進(jìn)行講解,PHP代碼作為實例。

安裝

客戶端實現(xiàn):添加擴(kuò)展,執(zhí)行composer.phar install命令

{
    "require": {
        "php-amqplib/php-amqplib": ">=3.0"
    }
}

引入包

require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;

建立一個鏈接,

# 鏈接服務(wù)
$connection = new AMQPStreamConnection('127.0.0.1', 5672, 'stark', '1990@stark');
$channel = $connection->channel();
$channel->queue_declare('hello', false, false, false, false);
$msg = new AMQPMessage('Hello World!');
$channel->basic_publish($msg, '', 'hello');
echo " [x] Sent 'Hello World!'\n";
# 關(guān)閉信道和鏈接
$channel->close();
$connection->close();

6種模式

1.簡單模式

簡單模式是最簡單的使用方式,P代表生產(chǎn)者,C代表消費者,紅色的代表隊列,執(zhí)行過程生產(chǎn)者發(fā)送消息到隊列,右面的消費者消費消息,需要注意的是這里沒有交換機(jī)。

生產(chǎn)者代碼(PHP)

# 聲明隊列
$queueName = 'MqName';
$channel->queue_declare($queueName, false, false, false, false);

queue_declare 參數(shù)說明:

  • 隊列名
  • 檢測隊列是否存在,true只檢測不創(chuàng)建,false會創(chuàng)建
  • 是否持久化隊列,true持久化
  • 是否私有隊列 true代表私有
  • 當(dāng)消費者斷開后,隊列是否自動刪除
# 創(chuàng)建AMQP消息類型
$msg = new AMQPMessage($data,
            array('delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT)
        );

AMQPMessage 參數(shù)說明: 1.消息體 2.是否持久化

$channel->basic_publish($msg, '', $queueName);

basic_publish參數(shù)詳解:

  • 發(fā)送內(nèi)容
  • 交換機(jī)名稱,簡單模式?jīng)]有使用交換機(jī)
  • 隊列名稱

消費者代碼:

$channel->basic_consume('hello', '', false, true, false, false, $callback);
# 阻塞隊列,做監(jiān)聽
while ($channel->is_open()) {
    $channel->wait();
}

basic_consume 參數(shù)說明:

  • 隊列名
  • 消費者標(biāo)簽
  • AMQP標(biāo)準(zhǔn)
  • 是否自動應(yīng)答 ack true 自動應(yīng)答,false應(yīng)答
  • 是否排他
  • ?
  • 回調(diào)函數(shù)

2.工作模式

它由一個生產(chǎn)者發(fā)送在隊列中,work隊列會分配消息給不同的消費者,讓每個消費者接收到不同的消息。

工作模式的場景特別適合集群模式的異步處理,最大程度發(fā)揮每一臺服務(wù)器的性能。

3.訂閱模式

從訂閱模式開始就使用了交換機(jī),訂閱模式使用了廣播類型的交換機(jī),它會讓每個隊列的消息都是一樣的。

生產(chǎn)者把消息發(fā)送給交換機(jī),交換機(jī)把消息發(fā)送給和它綁定的隊列,讓消費者來消費,需要強(qiáng)調(diào)的是綁定的隊列獲得的消息是一模一樣的,訂閱模式就是讓所有的消費者獲得相同的消息。

訂閱模式使用場景,天氣、微博的訂閱,收費文章的訂閱等等。

生產(chǎn)者實現(xiàn):

$channel->exchange_declare('logs', 'fanout', false, false, false);
# 綁定交換機(jī)和隊列
$channel->queue_bind($queue_name, 'logs');

交換機(jī)參數(shù)詳解:

  • 交換機(jī)名
  • 交換機(jī)類型
  • 檢查是否存在
  • 是否持久化
  • 是否自動刪除
$channel->basic_publish($msg, '這里是交換機(jī)的名字', $queueName);

消費者和生產(chǎn)者一樣,先綁定交換機(jī):

4.路由模式

路由模式使用direct定向類型的交換機(jī),生產(chǎn)者發(fā)送一個消息到交換機(jī),交換機(jī)根據(jù)發(fā)送來的路由鍵發(fā)送到相匹配的隊列中,來和隊列綁定的消費者進(jìn)行消費。

訂閱模式和路由模式的區(qū)別,訂閱模式無條件的把消息發(fā)送給所有的消費者,每一個消費者收到的消息都是一樣的,而路由模式對消息進(jìn)行篩選發(fā)送給對應(yīng)的消費者隊列。

5.主題模式

主題模式采用的事topic的交換機(jī),通過通配符進(jìn)行匹配,通配符主要有*#。

6.RPC模式

RabbitMQ的RPC模式,支持生產(chǎn)者和消費者不在同一個系統(tǒng)中,即允許遠(yuǎn)程調(diào)用的情況。通常,消費者作為服務(wù)端,放置在遠(yuǎn)程的系統(tǒng)中,提供接口,生產(chǎn)者調(diào)用接口,并發(fā)送消息。

RPC模式是一種遠(yuǎn)程調(diào)用的模式,因為需要http請求,因此速度比系統(tǒng)內(nèi)部調(diào)用慢。而且rpc模式下,通常不易區(qū)分哪些是來自外部的請求,哪些是內(nèi)部的請求,導(dǎo)致整體速度較慢。因此,不能濫用rpc模式。

最后

后面的3個模式不做詳細(xì)的代碼講解了,可以看參考官網(wǎng),實現(xiàn)起來都是差不多的。

以上就是以PHP代碼為實例詳解RabbitMQ消息隊列中間件的6種模式的詳細(xì)內(nèi)容,更多關(guān)于RabbitMQ模式php實例的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論

江都市| 积石山| 泰顺县| 渭源县| 乌海市| 克山县| 泰兴市| 饶阳县| 黄大仙区| 海安县| 阳朔县| 巫溪县| 龙川县| 诸暨市| 安吉县| 陈巴尔虎旗| 长沙市| 泗水县| 凌云县| 云龙县| 台山市| 霍城县| 金昌市| 开原市| 贵德县| 天水市| 久治县| 鹤壁市| 浦东新区| 隆尧县| 梨树县| 区。| 葫芦岛市| 黎平县| 昌图县| 内乡县| 花垣县| 定日县| 中阳县| 太仆寺旗| 建始县|