欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

以PHP代碼為實(shí)例詳解RabbitMQ消息隊(duì)列中間件的6種模式

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

RabbitMQ 6種工作模式

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

安裝

客戶端實(shí)現(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;

建立一個(gè)鏈接,

# 鏈接服務(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.簡(jiǎn)單模式

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

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

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

queue_declare 參數(shù)說(shuō)明:

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

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

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

basic_publish參數(shù)詳解:

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

消費(fèi)者代碼:

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

basic_consume 參數(shù)說(shuō)明:

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

2.工作模式

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

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

3.訂閱模式

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

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

訂閱模式使用場(chǎng)景,天氣、微博的訂閱,收費(fèi)文章的訂閱等等。

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

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

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

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

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

4.路由模式

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

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

5.主題模式

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

6.RPC模式

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

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

最后

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

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

相關(guān)文章

  • 利用php抓取蜘蛛爬蟲(chóng)痕跡的示例代碼

    利用php抓取蜘蛛爬蟲(chóng)痕跡的示例代碼

    這篇文章給大家分享了如何利用php抓取蜘蛛爬蟲(chóng)痕跡的方法,文中給出了示例代碼,方便大家學(xué)習(xí)和參考,有需要的朋友們可以參考借鑒。
    2016-09-09
  • Laravel中的Auth模塊詳解

    Laravel中的Auth模塊詳解

    最近在工作中遇到了Auth模塊,但是對(duì)Auth模塊一知半解,通過(guò)查找相關(guān)的資料了解學(xué)習(xí),所以下面這篇文章主要給大家介紹了關(guān)于Laravel中Auth模塊的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-08-08
  • CI(CodeIgniter)框架實(shí)現(xiàn)圖片上傳的方法

    CI(CodeIgniter)框架實(shí)現(xiàn)圖片上傳的方法

    這篇文章主要介紹了CI(CodeIgniter)框架實(shí)現(xiàn)圖片上傳的方法,結(jié)合實(shí)例形式分析了基于CodeIgniter調(diào)用文件上傳類實(shí)現(xiàn)圖片上傳功能的相關(guān)操作技巧,需要的朋友可以參考下
    2017-03-03
  • PHP中exec函數(shù)和shell_exec函數(shù)的區(qū)別

    PHP中exec函數(shù)和shell_exec函數(shù)的區(qū)別

    這篇文章主要介紹了PHP中exec函數(shù)和shell_exec函數(shù)的區(qū)別,這兩個(gè)函數(shù)是非常危險(xiǎn)的函數(shù),一般情況都是被禁用的,當(dāng)然特殊情況下也會(huì)使用,需要的朋友可以參考下
    2014-08-08
  • php cc攻擊代碼與防范方法

    php cc攻擊代碼與防范方法

    今天把客戶查找后門的時(shí)候發(fā)現(xiàn)的代碼,特分享下,看到這樣的代碼就是黑客用來(lái)攻擊別人訪問(wèn),不斷訪問(wèn)指定網(wǎng)站,導(dǎo)致網(wǎng)站無(wú)法訪問(wèn),我們的網(wǎng)站就是幫兇了,同時(shí)我們自己的網(wǎng)站或服務(wù)器也會(huì)無(wú)法訪問(wèn),所以一定要注意防范。
    2012-10-10
  • ThinkPHP自動(dòng)完成中使用函數(shù)與回調(diào)方法實(shí)例

    ThinkPHP自動(dòng)完成中使用函數(shù)與回調(diào)方法實(shí)例

    這篇文章主要介紹了ThinkPHP自動(dòng)完成中使用函數(shù)與回調(diào)方法,實(shí)例分析了ThinkPHP中自動(dòng)填充的用法以及使用函數(shù)與回調(diào)的方法,是非常實(shí)用的技巧,需要的朋友可以參考下
    2014-11-11
  • Laravel框架基于ajax和layer.js實(shí)現(xiàn)無(wú)刷新刪除功能示例

    Laravel框架基于ajax和layer.js實(shí)現(xiàn)無(wú)刷新刪除功能示例

    這篇文章主要介紹了Laravel框架基于ajax和layer.js實(shí)現(xiàn)無(wú)刷新刪除功能,結(jié)合實(shí)例形式簡(jiǎn)單分析了Laravel框架實(shí)現(xiàn)的ajax操作數(shù)據(jù)庫(kù)相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-01-01
  • Yii框架頁(yè)面渲染操作實(shí)例詳解

    Yii框架頁(yè)面渲染操作實(shí)例詳解

    這篇文章主要介紹了Yii框架頁(yè)面渲染操作,結(jié)合實(shí)例形式詳細(xì)分析了Yii框架頁(yè)面渲染的原理、流程及相關(guān)操作技巧,需要的朋友可以參考下
    2019-07-07
  • Laravel 5框架學(xué)習(xí)之環(huán)境與配置

    Laravel 5框架學(xué)習(xí)之環(huán)境與配置

    本文給大家主要介紹的是Laravel5框架中的環(huán)境配置,給大家詳細(xì)介紹了.env的配置文件,包含的數(shù)據(jù)庫(kù)配置信息的詳細(xì)解釋,這里推薦給大家,有需要的小伙伴參考下。
    2015-04-04
  • PHP在網(wǎng)頁(yè)中動(dòng)態(tài)生成PDF文件詳細(xì)教程

    PHP在網(wǎng)頁(yè)中動(dòng)態(tài)生成PDF文件詳細(xì)教程

    這篇文章主要介紹了PHP在網(wǎng)頁(yè)中動(dòng)態(tài)生成PDF文件詳細(xì)教程,本文用一個(gè)需求為引,詳細(xì)介紹每一步驟的做法,并配有大量圖片說(shuō)明,需要的朋友可以參考下
    2014-07-07

最新評(píng)論