柚子快報邀請碼778899分享:消息隊列RabbitMQ
柚子快報邀請碼778899分享:消息隊列RabbitMQ
消息隊列RabbitMQ
文章目錄
消息隊列RabbitMQ1、消息隊列2、RabbitMQ2.1、安裝RabbitMQ2.2、架構圖
3、收發(fā)消息3.1、交換機3.2、隊列3.3、綁定關系3.4、數(shù)據(jù)隔離
1、消息隊列
消息隊列是一種在分布式系統(tǒng)中常用的通信機制,簡稱為MQ,它允許不同的應用程序或服務之間通過發(fā)送和接收消息來進行異步通信。消息隊列的主要優(yōu)點包括:
解耦:消息隊列使得生產者和消費者之間不需要直接通信,從而降低了它們之間的耦合度。異步處理:生產者可以發(fā)送消息到隊列后立即返回,而消費者可以在稍后的時間點處理這些消息。流量削峰:消息隊列可以緩沖大量的請求,從而避免系統(tǒng)因為突發(fā)流量而崩潰??蓴U展性:通過增加消費者,可以輕松地擴展系統(tǒng)的處理能力。
比較常見的MQ實現(xiàn):
ActiveMQRabbitMQRocketMQKafka
幾種常見MQ的對比:
RabbitMQActiveMQRocketMQKafka公司/社區(qū)RabbitApache阿里Apache開發(fā)語言ErlangJavaJavaScala&Java協(xié)議支持AMQP,XMPP,SMTP,STOMPOpenWire,STOMP,REST,XMPP,AMQP自定義協(xié)議自定義協(xié)議可用性高一般高高單機吞吐量一般差高非常高消息延遲微秒級毫秒級毫秒級毫秒以內消息可靠性高一般高一般
追求可用性:Kafka、 RocketMQ 、RabbitMQ
追求可靠性:RabbitMQ、RocketMQ
追求吞吐能力:RocketMQ、Kafka
追求消息低延遲:RabbitMQ、Kafka
據(jù)統(tǒng)計,目前國內消息隊列使用最多的還是RabbitMQ,再加上其各方面都比較均衡,穩(wěn)定性也好
2、RabbitMQ
RabbitMQ是基于Erlang語言開發(fā)的開源消息通信中間件
官網地址:https://www.rabbitmq.com/
2.1、安裝RabbitMQ
基于Docker來安裝RabbitMQ,使用下面的命令即可:
docker run \
-e RABBITMQ_DEFAULT_USER=xiaolin \
-e RABBITMQ_DEFAULT_PASS=123456 \
-v mq-plugins:/plugins \
--name mq \
--hostname mq \
-p 15672:15672 \
-p 5672:5672 \
--network hm-net\
-d \
rabbitmq:3.8-management
這個 docker run 命令用于在 Docker 容器中啟動 RabbitMQ 服務器,并配置一些參數(shù)。下面是每個參數(shù)的解釋:
-e RABBITMQ_DEFAULT_USER=xiaolin: 設置 RabbitMQ 的默認用戶名為 xiaolin。-e RABBITMQ_DEFAULT_PASS=123456: 設置 RabbitMQ 的默認密碼為 123456。-v mq-plugins:/plugins: 將主機上的 mq-plugins 目錄掛載到容器內的 /plugins 目錄。這樣可以在容器內使用主機上的插件。--name mq: 給這個容器命名為 mq。--hostname mq: 設置容器的主機名為 mq。-p 15672:15672: 將主機的 15672 端口映射到容器的 15672 端口,這是 RabbitMQ 管理界面的端口。-p 5672:5672: 將主機的 5672 端口映射到容器的 5672 端口,這是 RabbitMQ 的 AMQP 端口。--network hm-net: 將容器連接到名為 hm-net 的 Docker 網絡。-d: 以分離模式(后臺模式)運行容器。rabbitmq:3.8-management: 指定要運行的 Docker 鏡像,這里是帶有管理插件的 RabbitMQ 3.8 版本。
安裝完成后,我們訪問 http://主機IP:15672即可看到管理控制臺。首次訪問需要登錄,默認的用戶名和密碼在配置文件中已經指定了。
登錄后即可看到管理控制臺總覽頁面:
2.2、架構圖
RabbitMQ對應的架構如圖:
其中包含幾個概念:
publisher:生產者,也就是發(fā)送消息的一方consumer:消費者,也就是消費消息的一方queue:隊列,存儲消息。生產者投遞的消息會暫存在消息隊列中,等待消費者處理exchange:交換機,負責消息路由。生產者發(fā)送的消息由交換機決定投遞到哪個隊列。virtual host:虛擬主機,起到數(shù)據(jù)隔離的作用。每個虛擬主機相互獨立,有各自的exchange、queue
3、收發(fā)消息
3.1、交換機
Exchanges選項卡,可以看到已經存在很多交換機:
點擊任意交換機,即可進入交換機詳情頁面。仍然會利用控制臺中的publish message 發(fā)送一條消息:
這里是由控制臺模擬了生產者發(fā)送的消息。由于沒有消費者存在,最終消息丟失了,這樣說明交換機沒有存儲消息的能力。
3.2、隊列
打開Queues選項卡,新建一個隊列:
命名為hello.mq,我這邊使用的是hmall用戶,默認是/
此時,我們再次向amq.fanout交換機發(fā)送一條消息。會發(fā)現(xiàn)消息依然沒有到達隊列!!
怎么回事呢?
發(fā)送到交換機的消息,只會路由到與其綁定的隊列,因此僅僅創(chuàng)建隊列是不夠的,我們還需要將其與交換機綁定。
3.3、綁定關系
點擊Exchanges選項卡,點擊amq.fanout交換機,進入交換機詳情頁,然后點擊Bindings菜單,在表單中填寫要綁定的隊列名稱:
點擊隊列名稱,進入詳情頁,查看隊列詳情,這次我們點擊get message:
3.4、數(shù)據(jù)隔離
用戶管理
點擊Admin選項卡,首先會看到RabbitMQ控制臺的用戶管理界面:
這里的用戶都是RabbitMQ的管理或運維人員。目前只有安裝RabbitMQ時添加的mqxiaolin這個用戶,我自己已經添加了hmall。仔細觀察用戶表格中的字段,如下:
Name:mqxiaolin,也就是用戶名Tags:administrator,說明mqxiaolin用戶是超級管理員,擁有所有權限Can access virtual host: /,可以訪問的virtual host,這里的/是默認的virtual host
對于小型企業(yè)而言,出于成本考慮,我們通常只會搭建一套MQ集群,公司內的多個不同項目同時使用。這個時候為了避免互相干擾, 我們會利用virtual host的隔離特性,將不同項目隔離。一般會做兩件事情:
給每個項目創(chuàng)建獨立的運維賬號,將管理權限分離。給每個項目創(chuàng)建不同的virtual host,將每個項目的數(shù)據(jù)隔離。
比如,創(chuàng)建一個新的用戶,命名為test:
你會發(fā)現(xiàn)此時hmall用戶沒有任何virtual host的訪問權限:
接下來我們就來授權。我們先退出登錄:
切換到剛剛創(chuàng)建的test用戶登錄,然后點擊Virtual Hosts菜單,進入virtual host管理頁:
可以看到目前只有一個默認的virtual host,名字為 /。
我們可以創(chuàng)建一個單獨的virtual host,而不是使用默認的/。
柚子快報邀請碼778899分享:消息隊列RabbitMQ
好文推薦
本文內容根據(jù)網絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉載請注明,如有侵權,聯(lián)系刪除。