1, 做用html
系統解耦 , 異步處理, 橫向擴展(擴展消費者系統),安全可靠,順序保證,解決併發,分佈式java
2, 什麼是中間件git
非底層操做系統軟件,非業務應用軟件,不是直接給最終用戶使用的,不能直接給客戶帶來價值的軟件,通稱爲中間件github
21, 什麼是消息中間件web
關注於數據的發送和接受,利用高效可靠的異步消息傳遞機制集成分佈式系統spring
什麼是JMS安全
java 消息服務,用於兩個應用程序直接或者分佈式系統中發送消息,進行異步通訊。Java API 。服務器
RabbiMQ 在 銀行或者金融方面使用比較多, activeMQ用於中小企業。 kafka用於 大數據處理網絡
JMS 消息模式架構
1, 隊列模型
11,客戶端包括生產者和消費者
12,隊列中的消息只能被一個消費者消費
13,消費者能夠隨時消費隊列中的消息
分攤處理消息
2, 主題模型
21, 客戶端包括髮布者和訂閱者
22,主題中的消息被全部訂閱者消費
23,消費者不能消費訂閱以前就發送到主題中的消息
JMS 編碼接口
ConnectionFactory 用於建立鏈接到消息中間件的鏈接工廠、
Connection 表明了應用程序和消息服務器之間的通訊鏈路
Destination 指消息發佈和接收的地點,包括隊列或者主題
Session表示一個單線程的上下文,用於發送和接收消息
MessageConsumer 由會話建立,用於接收發送到目標的消息
MessageProducer 由會話建立,用於發送消息到目標
Massage 是消費者和生產者之間傳遞的對象,消息頭,一組消息屬性,一個消息體
注意 在windown 平臺下 啓動mq 儘可能使用管理員身份,不然可能會出現權限上致使的其餘錯誤
activeMQ的默認用戶名和密碼是 admin admin
https://www.cnblogs.com/zhming26/p/6094364.html
對於win下來講 , 安裝目錄的bin 裏面的 activemq.bat 就是啓動 mq ,若是關閉窗口那麼mq就關閉了
InstallService.bat 就是 將mq 做爲一個 服務 程序來管理
集成spirng
1. ConnectionFactory 用於管理鏈接的鏈接工廠
11. 一個spring 提供的鏈接池
JmsTemplate 每次發消息都會從新建立鏈接,會話和productor
12 . spring 中提供了
SingleConnectionFactory 和 CachingConnectionFactory
2. JmsTemplate 用於發送和接收消息的模板類
21. 是spring提供的,只需向spring 容器內註冊這個類,就可使用JmsTemplate 方便的操做jms
22. JmsTemplate 類是線程安全的,能夠在整個應用範圍使用
3. MessageListerner 消息監聽器
31, 實現一個onMessage 方法,該方法只接收一個Message參數,對消息的處理
集羣 activemq
1,
客戶端集羣: 讓多個消費者消費同一個隊列
broker cluster : 多個broker之間同步消息
master slave : 實現高可用(主從,主被)
2, 客戶端配置
失效轉移
容許當其中一臺消息服務器掛了,客戶端在傳輸層上從新鏈接到 其餘消息服務器
ativemq 的失效轉移 語法 failover
參數:transportOptions
randomize 默認true ,表示在URI 列表中選擇 URI 鏈接時是否採用隨機策略
initialReconnectDelay 默認10 ,毫秒, 表示第一次嘗試重連之間等待的時間
maxReconnectDelay 默認30000 , 毫秒, 最長重連的時間間隔
3, 集羣原理
節點之間 消息同步
networkConnector 網絡鏈接器
網絡鏈接器主要用於配置activemq 服務器與服務器之間的網絡通信方式,用於服務器透傳消息
網絡鏈接器, 分爲 靜態鏈接,與動態鏈接 (多播方式)
master / slave 集羣配置
activeMQ Master Slave 集羣方案
1,share nothing storage master/slave (過期,從5.8 後移除)
2, share storage master/slave 共享存儲
首先A 節點服務器 搶到了 資源,成爲主機
若是A掛了,那麼B故障就轉移到B,
3, replicated leveldb store 基於複製的leveldb store (比較強),至少須要3臺服務器
先選A節點做爲主機, 而後 A節點服務,經過zookeeper 傳送數據到節點B,C上
至少又一臺機器能夠服務,同時 一臺機掛了 要儘快恢復
broker cluster 配置
!—配置網絡鏈接,採用靜態發現。duplex=true,意味雙向鏈接,192.168.91.8和192.168.91.8兩個Broker則無須配置--> <networkConnectors> <networkConnector name="localNetwork" uri="static://(tcp://192.168.91.8:61616,tcp://192.168.91.8:61676)" duplex="true"/> </networkConnectors>
也就是 說 加上了 duplex=true 其餘 鏈接的節點 mq 服務器就不用配置了。雖然配置也能夠
若是不加上 duplex=true 那麼 對應其餘節點服務器也要對應配置 networkconnector 網絡鏈接才能夠。
broker cluster 也就是說 節點mq 服務器都是消費者,也是生產者,均可以消費其餘節點生產的消息。
可是 在 mq 管理web頁面上 不能知道 其餘mq 並不能知道 其餘mq 生產了那些消息。
也就是說, 當 某個節點生產消息,掛掉以後, 其餘節點並不能消費到 以前生產的消息的。
master slave 配置測試
只要配置相同的 kahaDB directory 地址 ,
那麼先啓動的mq就是主機,其餘的就是備機。
被機 是拒絕全部訪問的,也就是 被機不能消費 主機生產的消息。
哪怕 被機配置了 broker cluster 也是沒用的,其餘節點的mq服務器不能鏈接它的
https://www.jianshu.com/p/5bcdcb4739e1
企業級系統應用
好比
特色
子業務系統都有集羣的可能性
同一個消息會廣播給關注該類消息的全部自業務系統
同一類消息在集羣中被負載消費
業務的發生和消息的發佈最終一致性
須要解決的問題
1.不一樣業務系統分別處理同一個消息,同一個業務系統負載處理同類消息
可是以上又一個問題,中轉器 須要負載,高可用,增長一個隊列就須要一箇中轉器
解決辦法
2.解決消息發送時的一致性問題
使用jms中XA系統接口保證強一致性
21, 引入分佈式事務
22. 要求業務操做必須支持XA協議(弱一致性,最終保證一致性)
23,
24.
3.解決消息處理的 冪等性問題
或者內存日誌
4. 基於消息機制創建事件總線
事件驅動架構
事件驅動架構,定義了一個設計和實現一個應用系統的方法學,在這個系統裏事件可傳輸於鬆散耦合的組件和服務之間。
特色:有事通知,沒事不打擾
其餘消息中間件
1, 解決各業務系統集羣處理同一條消息
2, 實現本身的消息提供者
rabbitMQ
kafka
源碼地址: github.com/jovezhao/nest
以上來自慕課網