一、RabbitMQ簡介
RabbitMQ是一個開源的消息代理和隊列服務器,用來通過普通協議在完全不同的應用之間共享數據,RabbitMQ是使用Erlang語言來編寫的,並且RabbitMQ是基於AMQP協議的。
1.1 RabbitMQ的優勢
- 開源、性能優秀,穩定性保障
- 提供可靠性消息投遞模式(confirm)、返回模式(return)
- 與SpringAMQP完美的整合、API豐富
- 集羣模式豐富,表達式配置,HA模式,鏡像隊列模型
- 保證數據不丟失的前提做到高可靠性、可用性
二、AMQP協議
2.1 AMQP簡介
AMQP全稱:Advanced Message Queuing Protocol 也就是高級消息隊列協議的意思。
AMQP協議模型如下圖所示:消息生產者將消息投遞到Exchange中,Exchange將消息轉發到相應的隊列中。消費者只需要監聽Message Queue消息隊列即可。
2.2 AMQP核心概念
Server: MQ服務器又稱Broker,用於接收客戶端的連接,實現AMQP實體服務。
Connection: 應用程序和Broker建立網絡連接
Channel: 網絡信道,幾乎所有的操作都在Channel中進行,Channel是進行消息讀寫的通道。客戶端可建立多個Channel,每個Channel代表一個會話任務。
Message: 消息,服務器和應用程序之間傳送的數據,由Properties和Body組成。Properties可以對消息進行設置,比如消息的優先級、延遲等高級特性;Body就是消息體內容。
Virtual host: 虛擬主機,用於進行邏輯隔離,最上層的消息路由,將不同的服務劃分開。一個Virtual Host裏面可以有若干個Exchange和Queue,同一個Virtual Host 裏面不能有相同名稱的Exchange或Queue(注: 這裏解釋一下邏輯隔離,如果你接觸過redis就應該知道,redis中默認劃分了16個數據庫,db0—db15。如果總共的內存空間是16G,那麼這16G並不是平均分配給一個數據庫的,你可以只利用一個數據庫去使用全部的16G內存空間。所以這16個數據庫只是在邏輯上被區分開,並沒有在物理空間上進行劃分。)
Exchange: 交換機,接收消息,根據路由鍵轉發消息到綁定的隊列。
Binding: Exchange和Queue之間的虛擬連接,binding中可以包含routing key
Routing key: 路由鍵,一個路由規則,Exchange可用它來確定如何路由一個信息到指定的隊列
Queue: 也就是Message Queue,消息隊列,保存消息並將它們轉發給消費者