RabbitMQ是一個消息代理:它接受和轉(zhuǎn)發(fā)消息。你可以把它想象成一個郵局:當(dāng)你把你想要發(fā)布的郵件放在郵箱中時,你可以確定郵差先生最終將郵件發(fā)送給你的收件人。在這個比喻中,RabbitMQ是郵政信箱,郵局和郵遞員。
RabbitMQ和郵局的主要區(qū)別在于它不處理紙張,而是接受,存儲和轉(zhuǎn)發(fā)二進(jìn)制數(shù)據(jù)塊 - 消息。引自(官網(wǎng)介紹)。
盡管消息流經(jīng)RabbitMQ,但它們只能存儲在隊列中。一個隊列只受主機(jī)內(nèi)存和磁盤限制的約束,它本質(zhì)上是一個很大的消息緩沖區(qū)。許多生產(chǎn)者可以發(fā)送進(jìn)入一個隊列的消息,并且許多消費(fèi)者可以嘗試從一個隊列接收數(shù)據(jù)。實質(zhì)上是生產(chǎn)者——消費(fèi)者關(guān)系。
消息(Message)是指在應(yīng)用間傳送的數(shù)據(jù)。消息可以非常簡單,比如只包含文本字符串,也可以更復(fù)雜,可能包含嵌入對象。
消息隊列(Message Queue)是一種應(yīng)用間的通信方式,消息發(fā)送后可以立即返回,由消息系統(tǒng)來確保消息的可靠傳遞。消息發(fā)布者只管把消息發(fā)布到 MQ 中而不用管誰來取,消息使用者只管從 MQ 中取消息而不管是誰發(fā)布的。這樣發(fā)布者和使用者都不用知道對方的存在。
從上面的描述中可以看出消息隊列是一種應(yīng)用間的異步協(xié)作機(jī)制,那什么時候需要使用 MQ 呢?
以常見的訂單系統(tǒng)為例,用戶點擊【下單】按鈕之后的業(yè)務(wù)邏輯可能包括:扣減庫存、生成相應(yīng)單據(jù)、發(fā)紅包、發(fā)短信通知。在業(yè)務(wù)發(fā)展初期這些邏輯可能放在一起同步執(zhí)行,隨著業(yè)務(wù)的發(fā)展訂單量增長,需要提升系統(tǒng)服務(wù)的性能,這時可以將一些不需要立即生效的操作拆分出來異步執(zhí)行,比如發(fā)放紅包、發(fā)短信通知等。這種場景下就可以用 MQ ,在下單的主流程(比如扣減庫存、生成相應(yīng)單據(jù))完成之后發(fā)送一條消息到 MQ 讓主流程快速完結(jié),而由另外的單獨線程拉取MQ的消息(或者由 MQ 推送消息),當(dāng)發(fā)現(xiàn) MQ 中有發(fā)紅包或發(fā)短信之類的消息時,執(zhí)行相應(yīng)的業(yè)務(wù)邏輯。
以上是用于業(yè)務(wù)解耦的情況,其它常見場景包括最終一致性、廣播、錯峰流控等等。
RabbitMQ 是一個由 Erlang 語言開發(fā)的 AMQP 的開源實現(xiàn)。
AMQP :Advanced Message Queue,高級消息隊列協(xié)議。它是應(yīng)用層協(xié)議的一個開放標(biāo)準(zhǔn),為面向消息的中間件設(shè)計,基于此協(xié)議的客戶端與消息中間件可傳遞消息,并不受產(chǎn)品、開發(fā)語言等條件的限制。
RabbitMQ 最初起源于金融系統(tǒng),用于在分布式系統(tǒng)中存儲轉(zhuǎn)發(fā)消息,在易用性、擴(kuò)展性、高可用性等方面表現(xiàn)不俗。具體特點包括:
(1)可靠性(Reliability)
RabbitMQ 使用一些機(jī)制來保證可靠性,如持久化、傳輸確認(rèn)、發(fā)布確認(rèn)。
(2)靈活的路由(Flexible Routing)
在消息進(jìn)入隊列之前,通過 Exchange 來路由消息的。對于典型的路由功能,RabbitMQ 已經(jīng)提供了一些內(nèi)置的 Exchange 來實現(xiàn)。針對更復(fù)雜的路由功能,可以將多個 Exchange 綁定在一起,也通過插件機(jī)制實現(xiàn)自己的 Exchange 。
(3)消息集群(Clustering)
多個 RabbitMQ 服務(wù)器可以組成一個集群,形成一個邏輯 Broker 。
(4)高可用(Highly Available Queues)
隊列可以在集群中的機(jī)器上進(jìn)行鏡像,使得在部分節(jié)點出問題的情況下隊列仍然可用。
(5)多種協(xié)議(Multi-protocol)
RabbitMQ 支持多種消息隊列協(xié)議,比如 STOMP、MQTT 等等。
(6)多語言客戶端(Many Clients)
RabbitMQ 幾乎支持所有常用語言,比如 Java、.NET、Ruby 等等。
(7)管理界面(Management UI)
RabbitMQ 提供了一個易用的用戶界面,使得用戶可以監(jiān)控和管理消息 Broker 的許多方面。
(8)跟蹤機(jī)制(Tracing)
如果消息異常,RabbitMQ 提供了消息跟蹤機(jī)制,使用者可以找出發(fā)生了什么。
(9)插件機(jī)制(Plugin System)
RabbitMQ 提供了許多插件,來從多方面進(jìn)行擴(kuò)展,也可以編寫自己的插件。
所有 MQ 產(chǎn)品從模型抽象上來說都是一樣的過程:
消費(fèi)者(consumer)訂閱某個隊列。生產(chǎn)者(producer)創(chuàng)建消息,然后發(fā)布到隊列(queue)中,最后將消息發(fā)送到監(jiān)聽的消費(fèi)者
上面只是最簡單抽象的描述,具體到 RabbitMQ 則有更詳細(xì)的概念需要解釋。上面介紹過 RabbitMQ 是 AMQP 協(xié)議的一個開源實現(xiàn),所以其內(nèi)部實際上也是 AMQP 中的基本概念:
(1)Message
消息,消息是不具名的,它由消息頭和消息體組成。消息體是不透明的,而消息頭則由一系列的可選屬性組成,這些屬性包括routing-key(路由鍵)、priority(相對于其他消息的優(yōu)先權(quán))、delivery-mode(指出該消息可能需要持久性存儲)等。
(2)Publisher
消息的生產(chǎn)者,也是一個向交換器發(fā)布消息的客戶端應(yīng)用程序。
(3)Exchange
交換器,用來接收生產(chǎn)者發(fā)送的消息并將這些消息路由給服務(wù)器中的隊列。
(4)Binding
綁定,用于消息隊列和交換器之間的關(guān)聯(lián)。一個綁定就是基于路由鍵將交換器和消息隊列連接起來的路由規(guī)則,所以可以將交換器理解成一個由綁定構(gòu)成的路由表。
(5)Queue
消息隊列,用來保存消息直到發(fā)送給消費(fèi)者。它是消息的容器,也是消息的終點。一個消息可投入一個或多個隊列。消息一直在隊列里面,等待消費(fèi)者連接到這個隊列將其取走。
(6)Connection
網(wǎng)絡(luò)連接,比如一個TCP連接。
(7)Channel
信道,多路復(fù)用連接中的一條獨立的雙向數(shù)據(jù)流通道。信道是建立在真實的TCP連接內(nèi)地虛擬連接,AMQP 命令都是通過信道發(fā)出去的,不管是發(fā)布消息、訂閱隊列還是接收消息,這些動作都是通過信道完成。因為對于操作系統(tǒng)來說建立和銷毀 TCP 都是非常昂貴的開銷,所以引入了信道的概念,以復(fù)用一條 TCP 連接。
(8)Consumer
消息的消費(fèi)者,表示一個從消息隊列中取得消息的客戶端應(yīng)用程序。
(9)Virtual Host
虛擬主機(jī),表示一批交換器、消息隊列和相關(guān)對象。虛擬主機(jī)是共享相同的身份認(rèn)證和加密環(huán)境的獨立服務(wù)器域。每個 vhost 本質(zhì)上就是一個 mini 版的 RabbitMQ 服務(wù)器,擁有自己的隊列、交換器、綁定和權(quán)限機(jī)制。vhost 是 AMQP 概念的基礎(chǔ),必須在連接時指定,RabbitMQ 默認(rèn)的 vhost 是 / 。
(10)Broker
表示消息隊列服務(wù)器實體。
首先,您需要安裝支持的 Windows 版Erlang。下載并運(yùn)行Erlang for Windows 安裝程序。下載地址http://www.erlang.org/downloads,我是64位的所以下載的64位版本
我用的是 otp_win64_21.0.1
可以去官網(wǎng)https://www.rabbitmq.com/download.html下載, 我用的 rabbitmq-server-3.7.7
PS: 這里有個坑需要注意一下
如果你的電腦用戶是中文的, 會安裝出問題, 每次啟動了rabbitmq之后會自動停掉進(jìn)程,因為中文會亂碼. 所以如果你的用戶目錄是中文的話,請按照下面的操作來
進(jìn)入安裝rabbitmq的sbin目錄
rabbitmq-service.bat remove
set RABBITMQ_BASE=D:\CloudMusic # 此路徑是自己配置的路徑,存放配置文件,默認(rèn)是在C盤
rabbitmq-plugins enable rabbitmq_management
rabbitmq-service start
新增一個用戶:
rabbitmq-plugins.bat enable rabbitmq_management 開啟插件
rabbitmq-service stop 停止服務(wù)
rabbitmq-service remove 刪除服務(wù)
rabbitmq-service install 安裝服務(wù)
rabbitmq-service start 開啟服務(wù)
rabbitmq用戶角色可分為五類:
(1) 超級管理員(administrator)
可登陸管理控制臺(啟用management plugin的情況下),可查看所有的信息,并且可以對用戶,策略(policy)進(jìn)行操作。
(2) 監(jiān)控者(monitoring)
可登陸管理控制臺(啟用management plugin的情況下),同時可以查看rabbitmq節(jié)點的相關(guān)信息(進(jìn)程數(shù),內(nèi)存使用情況,磁盤使用情況等)
(3) 策略制定者(policymaker)
可登陸管理控制臺(啟用management plugin的情況下), 同時可以對policy進(jìn)行管理。
(4) 普通管理者(management)
僅可登陸管理控制臺(啟用management plugin的情況下),無法看到節(jié)點信息,也無法對策略進(jìn)行管理。
(5) 其他的
無法登陸管理控制臺,通常就是普通的生產(chǎn)者和消費(fèi)者。
我們也給 eric 變成 “超級管理員” 角色
更改密碼
使用瀏覽器打開 http://localhost:15672 訪問Rabbit Mq的管理控制臺,使用剛才創(chuàng)建的賬號登陸系統(tǒng):
默認(rèn)賬號密碼為: guest
(1) 設(shè)置用戶權(quán)限
rabbitmqctl set_permissions -p VHostPath User ConfP WriteP ReadP
(2) 查看(指定hostpath)所有用戶的權(quán)限信息
rabbitmqctl list_permissions [-p VHostPath]
(3) 查看指定用戶的權(quán)限信息
rabbitmqctl list_user_permissions User
(4) 清除用戶的權(quán)限信息
rabbitmqctl clear_permissions [-p VHostPath] User
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
當(dāng)前題目:windows下安裝rabbitMQ及操作常用命令-創(chuàng)新互聯(lián)
URL分享:http://muchs.cn/article34/picpe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、微信公眾號、用戶體驗、做網(wǎng)站、網(wǎng)站設(shè)計公司、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容