資料內(nèi)容:
1. 基本概念
RabbitMQ是一款開源,使用Erlang編寫的,基于AMQP協(xié)議的消息中間件;
提到RabbitMQ,就不得不提AMQP協(xié)議。AMQP協(xié)議是具有現(xiàn)代特征的二進(jìn)制協(xié)議。是一個(gè)提供統(tǒng)一消息服
務(wù)的應(yīng)用層標(biāo)準(zhǔn)高級(jí)消息隊(duì)列協(xié)議,是應(yīng)用層協(xié)議的一個(gè)開放標(biāo)準(zhǔn),為面向消息的中間件設(shè)計(jì)。先了解一下
AMQP協(xié)議中間的幾個(gè)重要概念:
Server:接收客戶端的連接,實(shí)現(xiàn)AMQP實(shí)體服務(wù)。
Connection:連接,應(yīng)用程序與Server的網(wǎng)絡(luò)連接,TCP連接。
Channel:信道,消息讀寫等操作在信道中進(jìn)行??蛻舳丝梢越⒍鄠€(gè)信道,每個(gè)信道代表一個(gè)會(huì)話任
務(wù)。
Message:消息,應(yīng)用程序和服務(wù)器之間傳送的數(shù)據(jù),消息可以非常簡(jiǎn)單,也可以很復(fù)雜。由
Properties和Body組成。Properties為外包裝,可以對(duì)消息進(jìn)行修飾,比如消息的優(yōu)先級(jí)、延遲等高級(jí)
特性;Body就是消息體內(nèi)容。
Virtual Host:虛擬主機(jī),用于邏輯隔離。一個(gè)虛擬主機(jī)里面可以有若干個(gè)Exchange和Queue,同一個(gè)
虛擬主機(jī)里面不能有相同名稱的Exchange或Queue。
Exchange:交換器,接收消息,按照路由規(guī)則將消息路由到一個(gè)或者多個(gè)隊(duì)列。如果路由不到,或者
返回給生產(chǎn)者,或者直接丟棄。RabbitMQ常用的交換器常用類型有direct、topic、fanout、headers
四種,后面詳細(xì)介紹。
Binding:綁定,交換器和消息隊(duì)列之間的虛擬連接,綁定中可以包含一個(gè)或者多個(gè)RoutingKey。
RoutingKey:路由鍵,生產(chǎn)者將消息發(fā)送給交換器的時(shí)候,會(huì)發(fā)送一個(gè)RoutingKey,用來指定路由規(guī)
則,這樣交換器就知道把消息發(fā)送到哪個(gè)隊(duì)列。路由鍵通常為一個(gè)“.”分割的字符串,例如
“com.rabbitmq”。
Queue:消息隊(duì)列,用來保存消息,供消費(fèi)者消費(fèi)。
2. 系統(tǒng)架構(gòu)
AMQP協(xié)議模型由三部分組成:生產(chǎn)者、消費(fèi)者和服務(wù)端。生產(chǎn)者是投遞消息的一方,首先連接到Server,
建立一個(gè)連接,開啟一個(gè)信道;然后生產(chǎn)者聲明交換器和隊(duì)列,設(shè)置相關(guān)屬性,并通過路由鍵將交換器和隊(duì)
列進(jìn)行綁定。同理,消費(fèi)者也需要進(jìn)行建立連接,開啟信道等操作,便于接收消息。接著生產(chǎn)者就可以發(fā)送
消息,發(fā)送到服務(wù)端中的虛擬主機(jī),虛擬主機(jī)中的交換器根據(jù)路由鍵選擇路由規(guī)則,然后發(fā)送到不同的消息
隊(duì)列中,這樣訂閱了消息隊(duì)列的消費(fèi)者就可以獲取到消息,進(jìn)行消費(fèi)。