訊息佇列-ActiveMQ
1 業務需求描述
舉例描述:
再警情通報的業務時通過傳送訊息介面可以選擇
警情聯絡,和船情通報兩種訊息
傳送方式可分為
一對一發送:部門對部門、個人對個人
一對多傳送:部門對多部門、個人對多人
2 功能實現設計
基於上述需求描述,在訊息傳輸功能實現上選用activemq進行警情聯絡訊息傳輸功能的實現。
- 基礎概念
ActiveMQ:是Apache出品,最流行的,能力強勁的開源訊息匯流排。是一個完全支援JMS1.1和J2EE 1.4規範的 JMS Provider實現。
JMS(Java訊息服務):是一個Java平臺中關於面向訊息中介軟體(MOM)的API,用於在兩個應用程式之間,或分散式系統中傳送訊息,進行非同步通訊。
- JMS訊息模式
1) 點對點或佇列模式
每個訊息只能有一個消費者。訊息的生產者和消費者之間沒有時間上的相關性,無論消費者在生產者傳送訊息的時候是否處於執行狀態,它都可以提取訊息。
2) Pub/Sub 釋出/訂閱模式
每個訊息可以有多個消費者。生產者和消費者之間有時間上的相關性。訂閱一個主題的消費者只能消費自它訂閱之後釋出的訊息。
(基於我們的需求選用pub/sub)
- Broker節點
代表一個執行MQ的節點。
- Transport傳輸方式
ActiveMQ目前支援的Transport有:VM Transport、TCP Transport、NIO Transport、SSL Transport、Peer Transport、UDP Transport、Multicast Transport、HTTP and HTTPS Transport、WebSockets Transport、Failover Transport、Fanout Transport、Discovery Transport、ZeroConf Transport等。
1) VM Transport:允許客戶端和Broker直接在VM內部通訊,採用的連線不是Socket連線,而是直接的方法呼叫,從而避免了網路傳輸的開銷。應用場景也僅限於Broker和客戶端在同一JVM環境下。
2) TCP Transport:客戶端通過TCP Socket連線到遠端Broker。配置語法:
tcp://hostname:port?transportOptions
3) HTTP and HTTPS Transport:允許客戶端使用REST或者Ajax的方式進行連線。這意味著可以直接使用Javascript向ActiveMQ傳送訊息。
4) WebSockets Transport:允許客戶端通過HTML5標準的WebSockets方式連線到Broker。
5) Failover Transport:青龍系統MQ採用的就是這種連線方式。這種方式具備自動重新連線的機制,工作在其他Transport的上層,用於建立可靠的傳輸。允許配置任意多個的URI,該機制將會自動選擇其中的一個URI來嘗試連線。配置語法:
failover:(tcp://localhost:61616,tcp://localhost:61617,.....)?transportOptions
6) Fanout Transport:主要適用於生產訊息發向多個代理。如果多個代理出現環路,可能造成消費者接收重複的訊息。所以,使用該協議時,最好將訊息傳送給多個不相連線的代理。
- Persistence持久化儲存
1) AMQ Message Store
ActiveMQ 5.0 的預設持久化儲存方式。
2) Kaha Persistence
這是一個專門針對訊息持久化的解決方案。它對典型的訊息使用模式進行了優化。
3) JDBC Persistence
目前支援的資料庫有:Apache Derby, Axion, DB2, HSQL, Informix, MaxDB, MySQL, Oracle, Postgresql, SQLServer, Sybase。
4) Disable Persistence
不應用持久化儲存。
-
叢集方案
- Master / Slave
1.1. Pure Master Slave
無單點故障;
不需要依賴共享檔案系統或是共享資料庫,使用 KahaDB的方式持久化儲存;
一個Master只能帶一個Slave;
Master工作期間,會將訊息狀況自動同步到Slave;
Master一旦崩潰,Slave自動接替其工作,已傳送並尚未消費的訊息繼續有效;
Slave接手後,必須停止Slave才能重啟先前的Master;
1.2. Shared File System Master Slave
1.3. JDBC Master Slave
配置上,不存在Master和Slave的區分,多個共享資料來源的Broker構成JDBC Master Slave;
首先搶到資源(資料庫鎖)的Broker成為Master,其他Broker定期嘗試搶佔資源;
一旦Master崩潰,其他Broker搶佔資源,最終只有一臺搶到,立刻成為Master,之前的Master即便重啟成功,也只能作為Slave等待;