1、JMS
1:先了解什麼是JMS:JMS(Java Messaging Service)是Java平臺上有關面向消息中間件(MOM)的技術規範,它便於消息系統中的Java應用程序進行消息交換,而且經過提供標準的產生、發送、接收消息的接口簡化企業應用的開發,翻譯爲Java消息服務。java
2:JMS消息一般有兩種類型:
A: 點對點(Point-to-Point)。在點對點的消息系統中,消息分發給一個單獨的使用者。點對點消息每每與隊列(javax.jms.Queue)相關聯。
B:發佈/訂閱(Publish/Subscribe)。發佈/訂閱消息系統支持一個事件驅動模型,消息生產者和消費者都參與消息的傳遞。生產者發佈事件,而使用者訂閱感興趣的事件,並使用事件。該類型消息通常與特定的主題(javax.jms.Topic)關聯。mysql
2、開源消息中間件(ActiveMQ,Kafka)
一、ActiveMQ
A:徹底支持JMS規範,號稱最受歡迎,最爲強大的消息中間件,儘管某些方面實際並不強大。。。
B:支持多種語言客戶端:Java, C, C++, C#, Ruby, Perl, Python, PHP
C:支持消息集羣,虛擬目的地,通配符,組合目的地等高級特性。
D:支持Spring
E:支持協議可插拔: in-VM, TCP, SSL, NIO, UDP, multicast, JGroups and JXTA transports
F:支持使用JDBC進行快速持久化(使用mysql實際也不快,支持約500次寫入/每秒)
G:支持CXF,Axis,Ajax
H:消費者消費消息經過服務端推送方式進行,offeset由服務端維持
二、Kafka
A:它提供了相似於JMS的特性,可是在設計實現上徹底不一樣,此外它並非JMS規範的實現。
B:支持多種語言客戶端:Java,Python,C,C++,.net,Ruby,Perl,PHP,Clojure,Go,Node.js等等
C:支持服務端和消費者集羣;offset由消費者維護,能夠經過控制offset控制對之前消息的消費;消息存儲在磁盤,順序讀寫,能夠設置過時時間
D:支持分區,能夠設置複製因子進行容災,kafka自身主從複製機制可確保高可用
E:用戶可自行實現分區路由規則,確保同類消息只落在某一個分區。
F:經過消費者集羣設置可實現隊列模式和發佈-訂閱模式,這種設計也便於靈活擴展和容災
G:傳統消息中間件在多消費者模型中沒法很好的保證消費的順序性,但kafka能夠經過分區保證
H:kafka具備高吞吐,高可用,低延時的特性,7200r/s的磁盤可寫100M/s
I:適用場景:頁面瀏覽實時數據採集,實時監控,日誌收集等
J:Offset可存儲在zk或者kafka,若是網絡異常有出現重複消費的可能性,須要開發者自行保證冪等性
K:kafka能夠經過ACK確保不丟消息,但可能會帶來消息的重複發送問題
L:kafka經過批量消息處理,零拷貝,端到端批量壓縮等技術來提高效率
M:有較爲健全的監控機制,可經過KafkaOffsetMonitor或者KafkaWebConsole監控。也能夠經過JMX自定義進行自動監控。sql