1.RabbitMQ是一個由erlang開發的AMQP(Advanced Message Queue )的開源實現。安全
RabbitMQ的優點-:服務器
除了Qpid,RabbitMQ是惟一一個實現了AMQP標準的消息服務器;網絡
可靠性,RabbitMQ的持久化支持,保證了消息的穩定性;併發
高併發,RabbitMQ使用了Erlang開發語言,Erlang是爲電話交換機開發的語言,天生自帶高併發光環,和高可用特性;框架
集羣部署簡單,正是應爲Erlang使得RabbitMQ集羣部署變的超級簡單;異步
社區活躍度高,根據網上資料來看,RabbitMQ也是首選;分佈式
2.RabbitMQ系統最核心的組件是Exchange(交換機)和Queue(隊列)高併發
工做機制--> 生產者、消費者和代理加密
生產者:消息的建立者,負責建立和推送數據到消息服務器;代理
消費者:消息的接收方,用於處理數據和確認消息;
代理:就是RabbitMQ自己,用於扮演「快遞」的角色,自己不生產消息,只是扮演「快遞」的角色。
3.AMQP協議
AMQP協議是一個二進制協議,擁有一些現代特色:多信道、協商式、異步、安全、跨平臺、中立、高效。
AMQP一般被劃分爲三層:
模型層定義了一套命令(按功能分類),客戶端應用能夠利用這些命令來實現它的業務功能。
會話層負責將命令從客戶端應用傳遞給服務器,再將服務器的應答傳遞給客戶端應用,會話層爲這個傳遞過程提供可靠性、同步機制和錯誤處理。
傳輸層提供幀處理、信道複用、錯誤檢測和數據表示。
實現者能夠將傳輸層替換成任意傳輸協議,只要不改變AMQP協議中與客戶端應用程序相關的功能。實現者還可使用其餘高層協議中的會話層。
4.AMQP功能
存儲轉發(多個消息發送者,單個消息接收者)。
分佈式事務(多個消息發送者,多個消息接收者)。
發佈訂閱(多個消息發送者,多個消息接收者)。
基於內容的路由(多個消息發送者,多個消息接收者)。
文件傳輸隊列(多個消息發送者,多個消息接收者)。
點對點鏈接(單個消息發送者,單個消息接收者)。
5.AMQP術語
AMQP模型(AMQP Model):一個由關鍵實體和語義表示的邏輯框架,聽從AMQP規範的服務器必須提供這些實體和語義。爲了實現本規範中定義的語義,客戶端能夠發送命令來控制AMQP服務器。
鏈接(Connection):一個網絡鏈接,好比TCP/IP套接字鏈接。
會話(Session):端點之間的命名對話。在一個會話上下文中,保證「剛好傳遞一次」。
信道(Channel):多路複用鏈接中的一條獨立的雙向數據流通道。爲會話提供物理傳輸介質。
客戶端(Client):AMQP鏈接或者會話的發起者。AMQP是非對稱的,客戶端生產和消費消息,服務器存儲和路由這些消息。
服務器(Server):接受客戶端鏈接,實現AMQP消息隊列和路由功能的進程。也稱爲「消息代理」。
端點(Peer):AMQP對話的任意一方。一個AMQP鏈接包括兩個端點(一個是客戶端,一個是服務器)。
搭檔(Partner):當描述兩個端點之間的交互過程時,使用術語「搭檔」來表示「另外一個」端點的簡記法。好比咱們定義端點A和端點B,當它們進行通訊時,端點B是端點A的搭檔,端點A是端點B的搭檔。
片斷集(Assembly):段的有序集合,造成一個邏輯工做單元。
段(Segment):幀的有序集合,造成片斷集中一個完整子單元。
幀(Frame):AMQP傳輸的一個原子單元。一個幀是一個段中的任意分片。
控制(Control):單向指令,AMQP規範假設這些指令的傳輸是不可靠的。
命令(Command):須要確認的指令,AMQP規範規定這些指令的傳輸是可靠的。
異常(Exception):在執行一個或者多個命令時可能發生的錯誤狀態。
類(Class):一批用來描述某種特定功能的AMQP命令或者控制。
消息頭(Header):描述消息數據屬性的一種特殊段。
消息體(Body):包含應用程序數據的一種特殊段。消息體段對於服務器來講徹底不透明——服務器不能查看或者修改消息體。
消息內容(Content):包含在消息體段中的的消息數據。
交換器(Exchange):服務器中的實體,用來接收生產者發送的消息並將這些消息路由給服務器中的隊列。
交換器類型(Exchange Type):基於不一樣路由語義的交換器類。
消息隊列(Message Queue):一個命名實體,用來保存消息直到發送給消費者。
綁定器(Binding):消息隊列和交換器之間的關聯。
綁定器關鍵字(Binding Key):綁定的名稱。一些交換器類型可能使用這個名稱做爲定義綁定器路由行爲的模式。
路由關鍵字(Routing Key):一個消息頭,交換器能夠用這個消息頭決定如何路由某條消息。
持久存儲(Durable):一種服務器資源,當服務器重啓時,保存的消息數據不會丟失。
臨時存儲(Transient):一種服務器資源,當服務器重啓時,保存的消息數據會丟失。
持久化(Persistent):服務器將消息保存在可靠磁盤存儲中,當服務器重啓時,消息不會丟失。
非持久化(Non-Persistent):服務器將消息保存在內存中,當服務器重啓時,消息可能丟失。
消費者(Consumer):一個從消息隊列中請求消息的客戶端應用程序。
生產者(Producer):一個向交換器發佈消息的客戶端應用程序。
虛擬主機(Virtual Host):一批交換器、消息隊列和相關對象。虛擬主機是共享相同的身份認證和加密環境的獨立服務器域。客戶端應用程序在登陸到服務器以後,能夠選擇一個虛擬主機。
6.示意圖: