消息隊列
什么是消息隊列
消息隊列是消息中間件的一種實現方式。
什么是消息中間件?
將消息中間件需要理解一下什么是消息和中間件?
- 消息
消息是指軟件對象之間進行交互作用和通訊利用的一種方式。
- 中間件
百度百科的介紹:
中間件(Middleware)是處於操作系統和應用程序之間的軟件,也有人認為它應該屬於操作系統中的一部分。
這介紹的我的不是很明白,下面我就講解一下我的理解,什么是中間件:
首先,中間件 顧名思義 介於兩者之間的一個技術:
為了更好的理解中間件技術,我有了這樣的一個設想的概念,如圖:
信息:這是一個抽象的個體,可以代表一個軟件、計算機、或者一個系統等等。
聯系:則是進行通信、相互操作等等的抽象
中間件則是將 信息與信息之間的聯系踐行一種存儲或者管理的技術,這就是中間件技術。
根據其應用的不同,中間件分為:
一類是底層中間件,用於支撐單個應用系統或解決一類問題,包括交易中間件(TPM)、應用服務器、消息中間件(MOM)、數據訪問中間件(UDA),遠程調用中間件(RPC)等等;
另一類是高層中間件,更多的用於系統整合,包括企業應用集成中間件、工作流中間件、門戶中間件等,他們通常會與多個應用系統打交道,在系統中層次較高,並大多基於前一類的底層中間件運行。
總結:消息中間件則是將軟件與軟件之間的交互方式進行存儲和管理的一種技術,也可以看做是一種容器。
### 深入理解消息隊列:
消息隊列,是消息中間件的一種實現方式
下面是消息隊列傳遞服務的模型:
消息隊列的傳遞模型一共有兩中形式:
- 點對點(PTP)
即一個生產者和一個消費者一一對應;
點對點模型的特點:
1,每個消息只有一個消費者
2,發送者和接受者沒有時間依賴
3,接受者確認消息接受和處理成功
- 發布-訂閱(Pub/Sub)
發布/ 訂閱模式,即一個生產者產生消息並進行發送后,可以由多個消費者進
行接收。
發布-訂閱模型特點:
1,每個次消息可以有多個消費者
2,客戶只有訂閱后才能接收消息(只有建立訂閱關系才可以接收消息 )
3,持久訂閱和非持久訂閱
- 持久訂閱
訂閱關系建立后(關系保存在消息中間件中),不管消費者(也就是訂閱者)是否在線消息都不會消失。
- 非持久訂閱
建立一種類似長連接關系式的訂閱模式,訂閱者為了接收消息必須保持一直連接的狀態,如果斷開連接則丟失消息。
消息隊列的分類:
- push(推消息模型)
消息生產者將消息發送給消息中間件,消息中間件又將消息推送給消費者。
- pull(拉消息模型)
消費者請求 消息中間件接收消息,消費者從消息中間件拉取消息。
特點:
目前使用較多的消息隊列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ等 。
消息隊列的應用案例:
1,用戶注冊
2,日志收集分析
3,數據復制
4,延遲消息發送和暫存
5,消息廣播