1. 程式人生 > >訊息佇列原理及activeMQ基本知識點

訊息佇列原理及activeMQ基本知識點

activeMQ

1)廣義訊息佇列

a)訊息佇列本質:一次rpc變三次;內容儲存;合適的時間投遞
b)訊息佇列設計重點
rpc通訊: 協議(http,tcp),序列化(二進位制流)
儲存: 檔案/資料庫/記憶體
消費關係處理: 訊息生產者,訊息消費者,訂閱關係
事務/防丟防重/
批量處理/非同步處理(多執行緒投遞訊息)
效能: 高效儲存等
c)不同訊息佇列的特性: 訊息堆積能力/丟失概率/減少重複/順序保證/錯峰流控能力/最終一致性/慢消費處理等
d)基本流程
producer傳送訊息broker
broker儲存訊息
broker根據訂閱型別(topic/queue)傳送給consumer
consumer回覆訊息確認(各種acknowledge機制)
broker刪除訊息/備份
a)關注點
高效能rpc方案(開源rpc框架,netty/mina)
儲存方案(檔案系統/jdbc/redis)
投遞方案(何時從佇列中取得訊息進行投遞,多執行緒投遞模型)
消費關係儲存(訂閱關係存到公共儲存上,如zookeeper)
事務訊息: 即二階段提交的分散式事務;發生在producer和broker之間
i.轉賬問題: A賬號給B賬號轉賬100元,A和B是不同銀行的,採用訊息的方式來保證最終一致性,A銀行要扣錢更新DB,又要傳送訊息給broker,如何保證兩個操作的原子性?
ii.A先發送一個訊息給broker
iii.broker儲存成功後返回
iv.A根據返回結果更新DB,如果成功傳送confirm訊息給broker;如果失敗返回取消給broker
v.broker根據返回結果操作訊息狀態

2)jms

a)     java定義的訊息中介軟體的api規範,類似於jdbc

b)訊息傳送模型
p2p: 點對點基於queue的模式,一個訊息只發送給一個消費者;有多個消費者,預設輪詢傳送訊息,達到負載均衡
pub/sub: 基於topic的釋出/訂閱模式,一個訊息傳送給所有訂閱者
i.除非顯式指定,否則 topic 不會為訂閱者保留訊息
ii.可以通過持久化(Durable)訂閱來實現訊息的儲存
iii.當持久化訂閱者重新連線時,將會受到所有的斷連期間未消費的訊息

3)activeMQ是基於jms模型的訊息框架

a)支援多種通訊協議,常用的是TCP
b)核心通訊機制包含三部分訊息中介(Message Broker)和客戶(client: 生產者和消費者)建立連線,關閉連線,心跳
c)叢集: 基於zookeeper+level db的主從,基於檔案系統和資料庫的主從. 沒有負載均衡功能
d)負載均衡: Broker-Cluster部署方式
e)自己實現負載均衡
搭建3個基於檔案系統的主從
連線資訊存到zookeeper的節點中
客戶端監控zk節點
客戶端啟動時去zk中拿mq連線資訊
mq叢集發生變更後,zk通知客戶端