RabbitMQ基於Erlang語言和AMQP高級消息隊列協議,是一種開源的消息代理和隊列服務器。
AMQP協議模型 生產者只需要把消息放到虛擬主機的隊列中,而不用關心是哪個隊列,而消費者只需要監聽隊列,從隊列中獲取消息。架構圖如下:
關於圖中的概念解釋:
Server:又稱Broker,接收客戶端的連接,實現AMQP實體服務
Connection:連接,應用程序與Broker的網絡連接
Channel:網絡信道,幾乎所有的操作都在Channer中進行,Channel是進行消息讀寫的通道,客戶端可建立多個
Channel,每個Channel代表一個會話任務。
Message:消息,服務器和應用程序之間傳送的數據,由Properties和Body組成。Properties可以對消息進行修飾,比如 消息的優先級、延遲等高級特性;Body則是消息體內容。
Virtual host:虛擬地址,用於進行邏輯隔離(隔離不同的項目),最上層的消息路由。一個Virtual Host裏面可以有若干個 Exchange和Queue,同一個Virtual Host裏面不能有相同名稱的Exchange或Queue,生產者先把消息扔到 Virtual Host。
Exchange:交換機,接收消息,根據路由鍵轉發消息到綁定的隊列
Binding:Exchange和Queue之間的虛擬連結,bingding中可包含Routing key
Routing key:一個路由規則,虛擬機可用它來確定如何路由一個消息
Queue:也稱Message Queue 消息隊列,保存消息並轉發給消費者。
如下圖爲消息流通圖:生產者把消息扔給Virtual Host,並指定好Exchange和Routing Key,消費者只需要從隊列中取消息即可