ActiveMQ
- 型別
- topic 主題存盤,用于訂閱/消費模型,主題中的訊息會發送給消費者同時處理,只有在訊息可以重復處理的場景下使用
- queue 佇列存盤,常用于點對點模型,默認只能由唯一的一個消費者處理,一旦消費訊息洗掉
- 簡單對比
| 1 | Topic | Queue |
|---|---|---|
| Publish/Subsribe Message | point to point | |
| 有無狀態 | 默認資料是不落地,是無狀態的 | Queue資料一般會在服務器上以檔案形式保存,也可配置成DB存盤 |
| 完整性保障 | 并不保證publish的每條資料,subscribe都能接收到 | 保證每條資料都能接收到,并且不超時 |
| 訊息是否會丟失 | 一般來說publish訊息到某一個topic時,只有監聽著的sub才能接收到,如果沒有監聽則該topic就丟失了 | sender發送訊息到queue,reciever可以異步接收訊息,如果占時沒有處理訊息也不會丟失,前提訊息不超時 |
| 訊息發布接收策略 | 一對多的訊息發布策略,監聽同一個topic地址的多個sub能夠接收訊息 | 一對一的發布策略,一個sender發布的訊息只能一個reciever來消費,消費完后通知MQ進行洗掉或其他操作 |
- 訊息發送的步驟
- 獲取activeMQ的連接工廠
- 獲取一個MQ的連接
- 獲取session
- 找到目的地destination消費端,也會從這個地方消費訊息
- 創建訊息,向目的地寫訊息
- 關閉session
JMS訊息由以下三部分組成
- 訊息頭
每個訊息頭欄位都有相應的getter和setter方法 - 訊息屬性
如果需要除訊息頭之外的值,那么可以使用訊息屬性 - 訊息體
JMS定義的訊息型別有TextMessage,MapMessage,BytesMessage,StreamMessage和ObjectMessage,
- TextMessage文本訊息
- MapMessage K/V的形式
- BytesMessage 位元組流
- StreamMessage Java原始的資料流
- ObjectMessage 序列化的Java物件
應用場景
- 異步通信
有些業務不想也不需要立即處理訊息,訊息佇列提供了異步處理機制,允許用戶把一個訊息放入佇列但并不立即處理它,想向佇列中放多少就放多少,然后再需要的時候再去處理 - 緩沖
在任何重要的系統中,都會需要不同的處理時間的元素,訊息佇列通過一個緩沖層來幫助任務最高效率的執行,該緩沖有助于控制和優化資料流經過系統的速度,以調節系統回應的時間 - 解耦
降低工程間的強依賴程度,針對異構系統進行適配,在專案啟動之初來預測將來專案會碰到什么需求,是極其困難
的,通過訊息系統在處理程序中間插入了一個隱含的、基于資料的介面層,兩邊的處理程序都要實作這一介面,當
應用發生變化時,可以獨立的擴展或修改兩邊的處理程序,只要確保它們遵守同樣的介面約束,異構系統的訊息通信 - 冗余
有些情況下,處理資料的程序會失敗,除非資料被持久化,否則將造成丟失,訊息佇列把資料進行持久化直到它們
已經被完全處理,通過這一方式規避了資料丟失風險,許多訊息佇列所采用的插入獲取洗掉范式中,在把一個
訊息從佇列中洗掉之前,需要你的處理系統明確的指出該訊息已經被處理完畢,從而確保你的資料被安全的保存直
到你使用完畢, - 擴展性
因為訊息佇列解耦了處理的程序,所以增大訊息入隊和處理的頻率是很容易的,只需另外增加處理程序即可,不需要改變代碼、不需要調節引數,便于分布式擴容,也就是橫向擴容
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/264605.html
標籤:其他
上一篇:(小張張帶你0基礎學習C語言回圈)(for回圈陳述句、while回圈陳述句、do-while回圈陳述句詳解)
下一篇:互聯網大促運維實踐案例
