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