消息隊列(Message Queue,簡稱MQ),從字面上的意思來看,本質就是一個隊列,FIFO(先入先出),只不過隊列中存放的內容是Message而已。html
消息隊列主要用於不一樣進程(Process)/線程(Thread)之間通訊。它主要解決兩個問題:git
FIFOgithub
知足隊列的FIFO,先入先出策略編程
可靠性緩存
可擴展性負載均衡
可追蹤性異步
保證一致性分佈式
異步性性能
說到分佈式就必然牽扯出一系列的話題,負載均衡、服務定位、通訊協議、序列化協議…… 不是一兩句話就能說明白的。在這裏我們只說有關分佈式消息隊列的概念。線程
分佈式隊列編程模型
分佈式隊列編程模型包含三類角色:發送者(Sender)、分佈式(Queue)、接收者(Receiver)。發送者和接收者分別指的是生產消息和接收消息的應用程序或服務。
點對點模型(Point-to-Point)
基礎模型中,只有一個發送這、一個接收者和一個分佈式隊列。以下圖:
生產者消費者模型(Producer-consumer)
若是發送這和接收者均可以有多個部署實例,甚至不一樣的類型;可是共用同一個隊列,就變成了標準的生產者消費者模型。在該模型中,三個角色通常稱之爲生產者(Producer)、分佈式隊列(Queue)、消費者(Consumer)。以下圖:
發佈訂閱模型(PubSub)
若是隻有一類發送者,發送者將產生的消息實體按照不一樣的主題(Topic)分發到不一樣的邏輯隊列。每種主題隊列對應一類接收者。這就變成了典型的發佈訂閱模型。在該模型,三個角色被稱之爲發佈者(Publisher)、分佈式隊列(Queue)、訂閱者(Subscriber),以下圖:
MVC模型
若是發送者和接收者存在同一個實體中,可是共享一個分佈式隊列。這就像很經典的MVC模型。以下圖
最後,源碼下載
參考資料