摘要:的定義是使用語言開發(fā)的開源消息隊列系統(tǒng),完整的實現(xiàn)了高級抽象層消息通信協(xié)議。交換機接受發(fā)送的消息,并根據(jù)綁定規(guī)則轉發(fā)到對應的隊列。默認是無名交換使用空字符串標識。消息隊列是內(nèi)部對象,用于存儲未被消費的消息。
RabbitMQ的定義
RabbitMQ是使用erlang語言開發(fā)的開源消息隊列系統(tǒng),完整的實現(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
啟動mq服務(后臺啟動為rabbitmq-server -detached)
$ rabbitmq-server
登錄管理界面 http://127.0.0.1:15672 賬號密碼為:guest
客戶端RabbitMQ官方提供了三種PHP可用的擴展:php-amqp,php-rabbit,php-amqplib
php-amqplib 安裝php的客戶端現(xiàn)在常用的是php-amqplib
$ git clone https://github.com/php-amqplib/php-amqplib.git
將composer.json文件添加到您的項目中
{
“require”:{ “php-amqplib / php-amqplib”:“> = 2.6.1” }
}
下載依賴
$ composer install
概念 Virtual vhostsvirtual vhosts是一個命名空間,可以存在多個exchange和queue。實現(xiàn)了環(huán)境(用戶,用戶組,exchange,queue)隔離,是權限控制的最小粒度。默認的virtual host為/。
Exchange(交換機)接受producer發(fā)送的消息,并根據(jù)binding綁定規(guī)則轉發(fā)到對應的隊列。默認是無名交換使用空字符串標識。exchange type(交換機類型)包含四種類型:direct,topic,headers,fanout
轉發(fā)消息到routigKey指定的隊列
類似于direct類型,只不過routigKey為一個句點號“.”分隔的字符串
*可以替代一個字。
#可以替換零個或多個單詞。
根據(jù)發(fā)送的消息內(nèi)容中的headers屬性進行匹配。
將所有收到的消息廣播到所有已知的隊列。
Queue(消息隊列)queue是mq內(nèi)部對象,用于存儲未被customer消費的消息。相同屬性的queue可以重復定義,每個消息都會被投入到一個或多個隊列。
Binding(綁定)binding是將exchange和queue按照路由規(guī)則綁定起來。可以理解為binding是exchange和queue之間的關系
Connection(連接)消息tcp連接
Channel(信道)每個connection里,可建立多個channel,每個channel代表一個會話任務。做到盡量共用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,多個channel可以共用連接 $channel = $connection->channel(); // 創(chuàng)建交換機以及隊列(如果已經(jīng)存在,不需要重新再次創(chuàng)建并且綁定) // 創(chuàng)建直連的交換機 $channel->exchange_declare("direct_logs", "direct", false, false, false); // 創(chuàng)建隊列 $channel->queue_declare("hello", false, false, false, false); // 交換機跟隊列的綁定, $channel->queue_bind("hello", "direct_logs", "routigKey"); // 設置消息bady傳送字符串logs(消息只能為字符串,建議消息均json格式) $msg = new AMQPMessage("logs"); // 發(fā)送數(shù)據(jù)到對應的交換機direct_logs并設置對應的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,多個channel可以共用連接 $channel = $connection->channel(); // 可能會在數(shù)據(jù)發(fā)布之前啟動消費者,所以我們要確保隊列存在,然后再嘗試從中消費消息。 // 創(chuàng)建直連的交換機 $channel->exchange_declare("direct_logs", "direct", false, false, false); // 創(chuàng)建隊列 $channel->queue_declare("hello", false, false, false, false); // 交換機跟隊列的綁定, $channel->queue_bind("hello", "direct_logs", "routigKey"); // 回調(diào)函數(shù) $callback = function ($msg) { echo $msg->body; }; // 啟動隊列消費者 $channel->basic_consume("hello3", "", false, true, false, false, $callback); // 判斷是否存在回調(diào)函數(shù) while(count($channel->callbacks)) { // 此處為執(zhí)行回調(diào)函數(shù) $channel->wait(); }RabbitMQ備注
非持久化會導致,隊列重啟,數(shù)據(jù)丟失
exchange持久化,在聲明durable參數(shù)時指定為true
queue持久化,在聲明durable參數(shù)時指定true
消息持久化,實例化AMQPMessage類時指定delivery_mode為2
exchange和queue是否持久化需要一致才能綁定
消費者設置手動ack,在聲明no_ack參數(shù)時指定false
隊列消息異常需要將消息刪除并再次發(fā)送同樣的消息置于末尾并手動記錄日志
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/26097.html
摘要:本文基于的插件,針對進行簡單的測試。包括協(xié)議的介紹,的安裝配置開啟插件及基于進行的測試。協(xié)議是基于發(fā)布訂閱模型的物聯(lián)網(wǎng)消息傳遞協(xié)議。對傳輸消息有三種服務質(zhì)量最多一次,這一級別會發(fā)生消息丟失或重復,消息發(fā)布依賴于底層網(wǎng)絡。 ...
摘要:進行插入操作的端稱為隊尾,進行刪除操作的端稱為對頭。還有個專業(yè)術語要了解下生產(chǎn)者發(fā)送消息的應用程序被稱為生產(chǎn)者。消費者接收消息的應用程序被稱為消費者。參考鏈接下安裝及操作常用命令譯實戰(zhàn)教程一你是否聽說過或者使用過隊列? 你是否聽說過或者使用過消息隊列? 你是否聽說過或者使用過RabbitMQ? 提到這幾個詞,用過的人,也許覺得很簡單,沒用過的人,也許覺得很復雜,至少在我沒使用消息隊列之前,聽...
摘要:簡介是開發(fā)中很平常的中間件,本文講述的是怎么在一個項目中配置多源的,這里不過多的講解的相關知識點。但是需要配置多個源時,第二個及其以上的就需要單獨配置了,這里我使用的都是單獨配置的。源碼個人日拱一卒,不期速成 簡介 MQ 是開發(fā)中很平常的中間件,本文講述的是怎么在一個Spring Boot項目中配置多源的RabbitMQ,這里不過多的講解RabbitMQ的相關知識點。如果你也有遇到需要...
摘要:慕課網(wǎng)消息中間件極速入門與實戰(zhàn)學習總結時間年月日星期三說明本文部分內(nèi)容均來自慕課網(wǎng)。 慕課網(wǎng)《RabbitMQ消息中間件極速入門與實戰(zhàn)》學習總結 時間:2018年09月05日星期三 說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):https://www.imooc.com 教學源碼:無 學習源碼:https://github.com/zccodere/s... 第一章:RabbitM...
摘要:源碼安裝推薦使用的鏡像這樣也不會污染本地環(huán)境基于下載給予你自己使用的權限查找鏡像你會看到下載鏡像查看自己本地已經(jīng)下載好的鏡像運行鏡像查看自己已經(jīng)運行的鏡像說明你可能會遇到如下的因為本機與通信是通信,也就是通過文件通信的 源碼:https://github.com/ltoddy/rabbitmq-tutorial Introduction 安裝:(推薦使用docker的鏡像,這樣也不會污...
閱讀 3621·2021-09-30 09:59
閱讀 2229·2021-09-13 10:34
閱讀 577·2019-08-30 12:58
閱讀 1507·2019-08-29 18:42
閱讀 2198·2019-08-26 13:44
閱讀 2922·2019-08-23 18:12
閱讀 3321·2019-08-23 15:10
閱讀 1625·2019-08-23 14:37