一.什么是消息隊列
在高并發(fā)環(huán)境下,由于來不及同步處理炫狱,請求往往會發(fā)生堵塞,比如說剔猿,大量的insert视译,update之類的請求同時到達MySQL,直接導(dǎo)致無數(shù)的行鎖表鎖归敬,甚至最后請求會堆積過多酷含,從而觸發(fā)too many connections錯誤。通過使用消息隊列汪茧,我們可以異步處理請求椅亚,從而緩解系統(tǒng)的壓力。
核心概念
Message
消息舱污,消息是不具名的呀舔,它由消息頭和消息體組成。消息體是不透明的扩灯,而消息頭則由一系列的可選屬性組成媚赖,這些屬性包括routing-key(路由鍵)、priority(相對于其他消息的優(yōu)先權(quán))珠插、delivery-mode(指出該消息可能需要持久性存儲)等惧磺。Publisher
消息的生產(chǎn)者,也是一個向交換器發(fā)布消息的客戶端應(yīng)用程序丧失。-
Exchange
交換器豺妓,用來接收生產(chǎn)者發(fā)送的消息并將這些消息路由給服務(wù)器中的隊列。
Exchange有4種類型:direct(默認)布讹,fanout, topic, 和headers琳拭,不同類型的Exchange轉(zhuǎn)發(fā)消息的策略有所區(qū)別。-
direct:只有完全匹配才接受消息
direct -
fanout:不篩選描验,消息全部接受白嘁。
fanout -
topic:條件匹配。#代表0個字符或者N個字符膘流,*代表1個或者N個字符絮缅。
topic
-
Queue
消息隊列鲁沥,用來保存消息直到發(fā)送給消費者。它是消息的容器耕魄,也是消息的終點画恰。一個消息可投入一個或多個隊列。消息一直在隊列里面吸奴,等待消費者連接到這個隊列將其取走允扇。Binding
綁定,用于消息隊列和交換器之間的關(guān)聯(lián)则奥。一個綁定就是基于路由鍵將交換器和消息隊列連接起來的路由規(guī)則考润,所以可以將交換器理解成一個由綁定構(gòu)成的路由表。
Exchange 和Queue的綁定可以是多對多的關(guān)系读处。Connection
網(wǎng)絡(luò)連接糊治,比如一個TCP連接。Channel
信道罚舱,多路復(fù)用連接中的一條獨立的雙向數(shù)據(jù)流通道井辜。信道是建立在真實的TCP連接內(nèi)的虛擬連接,AMQP 命令都是通過信道發(fā)出去的馆匿,不管是發(fā)布消息抑胎、訂閱隊列還是接收消息,這些動作都是通過信道完成渐北。因為對于操作系統(tǒng)來說建立和銷毀 TCP 都是非常昂貴的開銷阿逃,所以引入了信道的概念,以復(fù)用一條 TCP 連接赃蛛。Consumer
消息的消費者恃锉,表示一個從消息隊列中取得消息的客戶端應(yīng)用程序。Virtual Host
虛擬主機呕臂,表示一批交換器破托、消息隊列和相關(guān)對象。虛擬主機是共享相同的身份認證和加密環(huán)境的獨立服務(wù)器域歧蒋。每個 vhost 本質(zhì)上就是一個 mini 版的 RabbitMQ 服務(wù)器土砂,擁有自己的隊列、交換器谜洽、綁定和權(quán)限機制萝映。vhost 是 AMQP 概念的基礎(chǔ),必須在連接時指定阐虚,RabbitMQ 默認的 vhost 是 / 序臂。Broker
表示消息隊列服務(wù)器實體
二.安裝RabbitMQ
當(dāng)然繼續(xù)使用我們的神器Docker,依次輸入指令即可
-
docker pull rabbitMQ:3.6-rc-management
其中帶有management后綴代表有Web管理界面 -
docker run -d -p 5672:5672 -p 15672:15672 --name myrabbitmq container-id
5672為訪問端口號实束,15672為Web管理界面端口奥秆。 -
接下來就可以訪問RabbitMQ的管理界面了逊彭,默認用戶密碼:guest
管理界面
三.RabbitMQ基本操作
有關(guān)于消息隊列的介紹和Web端的基本調(diào)試就到這里侮叮。之后我們來學(xué)習(xí)SpringBoot中調(diào)用消息隊列。