1)RabbitMQ 是實現了高階訊息佇列協定(AMQP)的開源訊息代理軟體(亦稱面向消 息的中介軟體);
2)RabbitMQ 伺服器是用 Erlang 語言編寫的,而羣集和故障轉移是構建在開 放電信平臺框架上的;
3)Erlang(['ə:læŋ])是一種通用的面向併發的程式語言,它由瑞典電信裝置製造商愛立信 所轄的 CS-Lab 開發,目的是創造一種可以應對大規模併發活動的程式語言和執行環境;
說明 | |
---|---|
Message | 訊息,是不具名稱的,它由訊息頭訊息體組成。訊息體是不透明的,而訊息頭則 由一系列可選屬性組成,這些屬性包括:routing-key(路由鍵)、priority(相對於其他訊息的 優先權)、delivery-mode(指出訊息可能永續性儲存)等 |
Publisher | 生產者,一個向交換器發佈訊息的用戶端應用服務 |
Consumer | 消費者,一個從訊息佇列中取得訊息的用戶端應用服務 |
Exchange | 交換器,接收生產者發送的訊息,並將這些訊息路由給伺服器中的佇列;三種常用的交換器型別(direct 發佈與訂閱【完全匹配】、fanout 廣播、topic 主題【規則匹配】) |
Binding | 系結,用於訊息佇列和交換器之間的關聯。一個系結就是基於路由鍵將交換器和訊息 佇列連線起來的路由規則,所以可以將交換器理解成一個由系結構成的路由表 |
Queue | 訊息佇列,用來儲存訊息直到發送給消費者。它是訊息的容器,也是訊息的終點。一 個訊息可投入一個或多個佇列。訊息一直在佇列裏面,等待消費者鏈接到這個佇列將其取走 |
Routing-key | 路由鍵,決定訊息該投遞到哪個佇列的規則;如果相匹配,訊息將會投遞到該佇列;如果不匹配,訊息將會進入黑洞; |
Connection | 鏈接,指 rabbit 伺服器和服務建立的 TCP 鏈接 |
Channel | 通道,是TCP裏面的虛擬鏈接 ,TCP 一旦開啓,就會建立 AMQP 通道,一條 TCP 連線上可以建立多條通道,發佈訊息、接收訊息、訂閱佇列這些動作都是通過通道完成的 |
Virtual Host | 虛擬主機,表示一批交換器,訊息佇列和相關物件;虛擬主機是共用相同的身份 認證和加密環境的獨立伺服器域。每個 vhost 本質上就是一個 mini 版的 RabbitMQ 伺服器, 擁有自己的佇列、交換器、系結和許可權機制 機製。vhost 是 AMQP 概唸的基礎,必須在鏈接時 指定,RabbitMQ 預設的 vhost 是/ |
Borker | 訊息佇列伺服器實體,即RabbitMQ 整體應用 |
交換器和佇列關係 | 交換器是通過路由鍵和佇列系結在一起的,如果訊息擁有的路由鍵跟佇列和交換器的 路由鍵匹配,那麼訊息就會被路由到該系結的佇列中; |
爲何使用通道而不是 TCP 直接通訊:
1)TCP 的建立和銷燬開銷特別大,建立需要 3 次握手,銷燬需要 4 次分手;
2)如果不用通道,那應用程式就會以 TCP 鏈接 Rabbit,高峯時每秒成千上萬條鏈接會 造成資源巨大的浪費,而且操作系統每秒處理 TCP 鏈接數也是有限制的,必定造成效能 瓶頸;
3)通道的原理是一條執行緒一條通道,多條執行緒多條通道同用一條 TCP 鏈接。理論上一條 TCP 鏈接可以容納無限的通道,即使每秒成千上萬的請求也不會成爲效能的瓶頸;