一.JMS
- JMS規(guī)范,Java api,不跨語言
- 提供兩種消息模型:p2p,pub/sub
- 消息類型:
TextMessage,MapMessage,BytesMessage,StreamMessage,ObjectMessage,Message - Java消息服務(wù)(Java Message Service)即JMS,是一個(gè)java平臺(tái)中關(guān)于面向消息中間件的API,用于在兩個(gè)應(yīng)用程序之間,或分布式系統(tǒng)中發(fā)送消息,進(jìn)行異步通信.
- JMS定義了JAVAAPI層面標(biāo)準(zhǔn);在java體系中,多個(gè)client均可以通過JMS進(jìn)行交互,不需要應(yīng)用修改代碼,但是其對(duì)跨平臺(tái)支持較差.
二.AMQP
- AMQP協(xié)議,Wire-protocol,跨語言
- 提供了五種消息模型:direct,fanout,topic,headers,system
- 消息類型:byte[]
- AMQP(advanced message queuing protocol)是一個(gè)提供統(tǒng)一消息服務(wù)的應(yīng)用層標(biāo)準(zhǔn)協(xié)議,基于此協(xié)議的客戶端與消息中間件可傳遞消息,并不受客戶端/中間件不同產(chǎn)品,不同開發(fā)語言等條件的限制.
- AMQP的主要特征是面向消息,隊(duì)列,路由(包括點(diǎn)對(duì)點(diǎn)和發(fā)布/訂閱),可靠性,安全.
三.常見消息中間件對(duì)比
- ActiveMQ
ActiveMQ是Apache出品,最流行的,能力強(qiáng)勁的開源消息總線.ActiveMQ是一個(gè)> 完全支持JMS1.1和J2EE1.4規(guī)范的JMS Provider實(shí)現(xiàn),盡管JMS規(guī)范出臺(tái)已經(jīng)>
是很久的事情了,但是JMS在當(dāng)今的J2EE應(yīng)用中間仍然扮演著特殊的地位.
- 多種語言和協(xié)議編寫客戶端.語言:
Java,C,C++,C#,Ruby,Perl,Python,PHP.應(yīng)用協(xié)議:OpenWire,Stomp REST,WS Notification,XMPP,AMQP - 完全支持JMS1.1和J2EE 1.4規(guī)范(持久化,XA消息,事務(wù))
- 虛擬主題,組合目的,鏡像隊(duì)列
- 支持持久化
- 2.RabbitMQ
RabbitMQ是一個(gè)開源的AMQP實(shí)現(xiàn),服務(wù)器端用Erlang語言編寫.用于在分布式
系統(tǒng)中存儲(chǔ)轉(zhuǎn)發(fā)消息,在易用性,拓展性,高可用性等方面表現(xiàn)不俗.
- 特性:支持多種客戶端,如:Python,Ruby,.NET,Java,JMS,C,PHP,ActionScript等
- AMQP的完整實(shí)現(xiàn)(vhst,Exchange,Binding,Routing Key等)
- 事務(wù)支持/發(fā)布確認(rèn)
- 消息持久化
- Kafka
Kafka是一種高吞吐量的分布式發(fā)布訂閱消息系統(tǒng),是一個(gè)分布式的,分區(qū)的,可靠>的分布式日志存儲(chǔ)服務(wù).它通過一種獨(dú)一無二的設(shè)計(jì)提供了一個(gè)消息系統(tǒng)的功能.
- 通過O(1)的磁盤數(shù)據(jù)結(jié)構(gòu)提供消息持久化,這種結(jié)構(gòu)對(duì)于即使數(shù)以TB的消息存儲(chǔ)也能夠保持長時(shí)間的穩(wěn)定性能
- 高吞吐量:即使是非常普通的硬件Kafka也可以支持每秒數(shù)百萬的消息.
- Partition,Consumer Group
- 以Java平臺(tái)為主