成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

RabbitMQ使用

codeKK / 1097人閱讀

摘要:的定義是使用語言開發(fā)的開源消息隊(duì)列系統(tǒng),完整的實(shí)現(xiàn)了高級抽象層消息通信協(xié)議。交換機(jī)接受發(fā)送的消息,并根據(jù)綁定規(guī)則轉(zhuǎn)發(fā)到對應(yīng)的隊(duì)列。默認(rèn)是無名交換使用空字符串標(biāo)識。消息隊(duì)列是內(nèi)部對象,用于存儲(chǔ)未被消費(fèi)的消息。

RabbitMQ的定義

RabbitMQ是使用erlang語言開發(fā)的開源消息隊(duì)列系統(tǒng),完整的實(shí)現(xiàn)了AMPQ(高級抽象層消息通信協(xié)議)。

Mac下RabbitMQ安裝

使用Homebrew安裝

$ brew install rabbitmq

修改 ~/.bash_profile 配置環(huán)境變量:

# RabbitMQ Config
export PATH=$PATH:/usr/local/sbin

重啟配置

$ source ~/.bash_profile

啟動(dòng)mq服務(wù)(后臺(tái)啟動(dòng)為rabbitmq-server -detached)

$ rabbitmq-server 

登錄管理界面 http://127.0.0.1:15672 賬號密碼為:guest

客戶端

RabbitMQ官方提供了三種PHP可用的擴(kuò)展:php-amqp,php-rabbit,php-amqplib

php-amqplib 安裝

php的客戶端現(xiàn)在常用的是php-amqplib

直接拉取github上面的代碼
    $ git clone https://github.com/php-amqplib/php-amqplib.git
composer安裝(官網(wǎng)提供)

將composer.json文件添加到您的項(xiàng)目中

{

 “require”:{
     “php-amqplib / php-amqplib”:“> = 2.6.1”
}

}

下載依賴

$ composer install

概念

Virtual vhosts

virtual vhosts是一個(gè)命名空間,可以存在多個(gè)exchange和queue。實(shí)現(xiàn)了環(huán)境(用戶,用戶組,exchange,queue)隔離,是權(quán)限控制的最小粒度。默認(rèn)的virtual host為/。

Exchange(交換機(jī))

接受producer發(fā)送的消息,并根據(jù)binding綁定規(guī)則轉(zhuǎn)發(fā)到對應(yīng)的隊(duì)列。默認(rèn)是無名交換使用空字符串標(biāo)識。exchange type(交換機(jī)類型)包含四種類型:direct,topic,headers,fanout

direct

轉(zhuǎn)發(fā)消息到routigKey指定的隊(duì)列

topic

類似于direct類型,只不過routigKey為一個(gè)句點(diǎn)號“.”分隔的字符串

*可以替代一個(gè)字。

#可以替換零個(gè)或多個(gè)單詞。

headers

根據(jù)發(fā)送的消息內(nèi)容中的headers屬性進(jìn)行匹配。

fanout

將所有收到的消息廣播到所有已知的隊(duì)列。

Queue(消息隊(duì)列)

queue是mq內(nèi)部對象,用于存儲(chǔ)未被customer消費(fèi)的消息。相同屬性的queue可以重復(fù)定義,每個(gè)消息都會(huì)被投入到一個(gè)或多個(gè)隊(duì)列。

Binding(綁定)

binding是將exchange和queue按照路由規(guī)則綁定起來??梢岳斫鉃閎inding是exchange和queue之間的關(guān)系

Connection(連接)

消息tcp連接

Channel(信道)

每個(gè)connection里,可建立多個(gè)channel,每個(gè)channel代表一個(gè)會(huì)話任務(wù)。做到盡量共用connection

RabbitMQ使用示例

1.send.php:

    require_once __DIR__ . "/vendor/autoload.php";
    use PhpAmqpLibConnectionAMQPStreamConnection;
    use PhpAmqpLibMessageAMQPMessage;

    // 創(chuàng)建連接
    $connection = new AMQPStreamConnection("localhost", 5672, "guest", "guest");
    // 創(chuàng)建channel,多個(gè)channel可以共用連接
    $channel = $connection->channel();

    // 創(chuàng)建交換機(jī)以及隊(duì)列(如果已經(jīng)存在,不需要重新再次創(chuàng)建并且綁定)

    // 創(chuàng)建直連的交換機(jī)
    $channel->exchange_declare("direct_logs", "direct", false, false, false);
    // 創(chuàng)建隊(duì)列
    $channel->queue_declare("hello", false, false, false, false);
    // 交換機(jī)跟隊(duì)列的綁定,
    $channel->queue_bind("hello", "direct_logs", "routigKey");


    // 設(shè)置消息bady傳送字符串logs(消息只能為字符串,建議消息均json格式)
    $msg = new AMQPMessage("logs");
    // 發(fā)送數(shù)據(jù)到對應(yīng)的交換機(jī)direct_logs并設(shè)置對應(yīng)的routigKey
    $channel->basic_publish($msg, "direct_logs", "routigKey");

2.receive.php:

    require_once __DIR__ . "/vendor/autoload.php";
    use PhpAmqpLibConnectionAMQPStreamConnection;

    // 創(chuàng)建連接
    $connection = new AMQPStreamConnection("localhost", 5672, "guest", "guest");
    // 創(chuàng)建channel,多個(gè)channel可以共用連接
    $channel = $connection->channel();

    // 可能會(huì)在數(shù)據(jù)發(fā)布之前啟動(dòng)消費(fèi)者,所以我們要確保隊(duì)列存在,然后再嘗試從中消費(fèi)消息。

    // 創(chuàng)建直連的交換機(jī)
    $channel->exchange_declare("direct_logs", "direct", false, false, false);
    // 創(chuàng)建隊(duì)列
    $channel->queue_declare("hello", false, false, false, false);
    // 交換機(jī)跟隊(duì)列的綁定,
    $channel->queue_bind("hello", "direct_logs", "routigKey");

    // 回調(diào)函數(shù)
    $callback = function ($msg) {
        echo $msg->body;
    };

    // 啟動(dòng)隊(duì)列消費(fèi)者
    $channel->basic_consume("hello3", "", false, true, false, false, $callback);
    // 判斷是否存在回調(diào)函數(shù)
    while(count($channel->callbacks)) {
        // 此處為執(zhí)行回調(diào)函數(shù)
        $channel->wait();
    }

RabbitMQ備注

非持久化會(huì)導(dǎo)致,隊(duì)列重啟,數(shù)據(jù)丟失

exchange持久化,在聲明durable參數(shù)時(shí)指定為true

queue持久化,在聲明durable參數(shù)時(shí)指定true

消息持久化,實(shí)例化AMQPMessage類時(shí)指定delivery_mode為2

exchange和queue是否持久化需要一致才能綁定

消費(fèi)者設(shè)置手動(dòng)ack,在聲明no_ack參數(shù)時(shí)指定false

隊(duì)列消息異常需要將消息刪除并再次發(fā)送同樣的消息置于末尾并手動(dòng)記錄日志

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/26097.html

相關(guān)文章

  • 基于RabbitMQ的MQTT插件搭建MQTT服務(wù),使用MQTTX進(jìn)行收發(fā)測試

    摘要:本文基于的插件,針對進(jìn)行簡單的測試。包括協(xié)議的介紹,的安裝配置開啟插件及基于進(jìn)行的測試。協(xié)議是基于發(fā)布訂閱模型的物聯(lián)網(wǎng)消息傳遞協(xié)議。對傳輸消息有三種服務(wù)質(zhì)量最多一次,這一級別會(huì)發(fā)生消息丟失或重復(fù),消息發(fā)布依賴于底層網(wǎng)絡(luò)。 ...

    ymyang 評論0 收藏0
  • RabbitMQ使用教程(一)RabbitMQ環(huán)境安裝配置及Hello World示例

    摘要:進(jìn)行插入操作的端稱為隊(duì)尾,進(jìn)行刪除操作的端稱為對頭。還有個(gè)專業(yè)術(shù)語要了解下生產(chǎn)者發(fā)送消息的應(yīng)用程序被稱為生產(chǎn)者。消費(fèi)者接收消息的應(yīng)用程序被稱為消費(fèi)者。參考鏈接下安裝及操作常用命令譯實(shí)戰(zhàn)教程一你是否聽說過或者使用過隊(duì)列? 你是否聽說過或者使用過消息隊(duì)列? 你是否聽說過或者使用過RabbitMQ? 提到這幾個(gè)詞,用過的人,也許覺得很簡單,沒用過的人,也許覺得很復(fù)雜,至少在我沒使用消息隊(duì)列之前,聽...

    SegmentFault 評論0 收藏0
  • Spring Boot 配置多源的 RabbitMQ

    摘要:簡介是開發(fā)中很平常的中間件,本文講述的是怎么在一個(gè)項(xiàng)目中配置多源的,這里不過多的講解的相關(guān)知識點(diǎn)。但是需要配置多個(gè)源時(shí),第二個(gè)及其以上的就需要單獨(dú)配置了,這里我使用的都是單獨(dú)配置的。源碼個(gè)人日拱一卒,不期速成 簡介 MQ 是開發(fā)中很平常的中間件,本文講述的是怎么在一個(gè)Spring Boot項(xiàng)目中配置多源的RabbitMQ,這里不過多的講解RabbitMQ的相關(guān)知識點(diǎn)。如果你也有遇到需要...

    paulquei 評論0 收藏0
  • 慕課網(wǎng)_《RabbitMQ消息中間件極速入門與實(shí)戰(zhàn)》學(xué)習(xí)總結(jié)

    摘要:慕課網(wǎng)消息中間件極速入門與實(shí)戰(zhàn)學(xué)習(xí)總結(jié)時(shí)間年月日星期三說明本文部分內(nèi)容均來自慕課網(wǎng)。 慕課網(wǎng)《RabbitMQ消息中間件極速入門與實(shí)戰(zhàn)》學(xué)習(xí)總結(jié) 時(shí)間:2018年09月05日星期三 說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):https://www.imooc.com 教學(xué)源碼:無 學(xué)習(xí)源碼:https://github.com/zccodere/s... 第一章:RabbitM...

    mykurisu 評論0 收藏0
  • rabbitmq前言說明

    摘要:源碼安裝推薦使用的鏡像這樣也不會(huì)污染本地環(huán)境基于下載給予你自己使用的權(quán)限查找鏡像你會(huì)看到下載鏡像查看自己本地已經(jīng)下載好的鏡像運(yùn)行鏡像查看自己已經(jīng)運(yùn)行的鏡像說明你可能會(huì)遇到如下的因?yàn)楸緳C(jī)與通信是通信,也就是通過文件通信的 源碼:https://github.com/ltoddy/rabbitmq-tutorial Introduction 安裝:(推薦使用docker的鏡像,這樣也不會(huì)污...

    Barry_Ng 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<