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