什么是中間件藐翎?
非底層操作軟件,非業(yè)務(wù)應(yīng)用軟件紫岩,不是直接給最終用戶使用的规惰,不能直接給客戶帶來價(jià)值的軟件統(tǒng)稱為中間件
什么是消息中間件?
關(guān)注于數(shù)據(jù)的發(fā)送和接受泉蝌,利用高效可靠的異步消息轉(zhuǎn)遞機(jī)制集成分布式系統(tǒng)
什么是JMS歇万?
Java消息服務(wù)(Java Message Service)即JMS,是一個(gè)Java平臺(tái)中關(guān)于面向消息中間件的API勋陪,用于在兩個(gè)應(yīng)用程序之間贪磺,或分布式系統(tǒng)中發(fā)送消息,進(jìn)行異步通信诅愚。
什么是AMQP寒锚?
AMQP 是一個(gè)提供統(tǒng)一消息服務(wù)的應(yīng)用層標(biāo)準(zhǔn)協(xié)議,基于此協(xié)議的客戶端與消息中間件可傳遞消息违孝,并不受客戶端/中間件不同產(chǎn)品刹前,不同開發(fā)語言等條件的限制。
JMS和AMQP對(duì)比
- | JMS | AMQP |
---|---|---|
定義 | Java api | Wire-protocol |
跨語言 | 否 | 是 |
跨平臺(tái) | 否 | 是 |
Model | 提供兩種消息模型:(1)雌桑、Peer-2-Peer(2)喇喉、Pub/sub | 提供了五種消息模型:(1)、direct exchange(2)筹燕、fanout exchange(3)轧飞、topic change(4)、headers exchange(5)撒踪、system exchange本質(zhì)來講过咬,后四種和JMS的pub/sub模型沒有太大差別,僅是在路由機(jī)制上做了更詳細(xì)的劃分制妄; |
支持消息類型 | 多種消息類型:TextMessage掸绞,MapMessage,BytesMessage耕捞,StreamMessage衔掸,ObjectMessage,Message (只有消息頭和屬性) | byte[] 當(dāng)實(shí)際應(yīng)用時(shí)俺抽,有復(fù)雜的消息敞映,可以將消息序列化后發(fā)送。 |
綜合評(píng)價(jià) | JMS 定義了JAVA API層面的標(biāo)準(zhǔn)磷斧;在java體系中振愿,多個(gè)client均可以通過JMS進(jìn)行交互捷犹,不需要應(yīng)用修改代碼,但是其對(duì)跨平臺(tái)的支持較差冕末; | AMQP定義了wire-level層的協(xié)議標(biāo)準(zhǔn)萍歉;天然具有跨平臺(tái)、跨語言特性档桃。 |
常見消息中間件對(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)用中間仍然扮演著特殊的地位仅炊。
ActiveMQ特性
- 多種語言和協(xié)議編寫客戶端斗幼。語言:Java,C抚垄,C++蜕窿,C#,Ruby,Prel,Python,PHP。應(yīng)用協(xié)議:OpenWire,Stomp REST,WS Notification,XMPP,AWQP
- 完美支持JMS1.1和J2EE1.4規(guī)范(持久化呆馁,XA消息桐经,事務(wù))
- 虛擬主題,組合目的浙滤,鏡像隊(duì)列
RebbitMQ
- RabbitMQ是一個(gè)開源的AMQP實(shí)現(xiàn)阴挣,服務(wù)器端用Erlang語言編寫。用于在分布式系統(tǒng)中存儲(chǔ)轉(zhuǎn)發(fā)消息纺腊,在易用性畔咧,擴(kuò)展性,高可用性等方面表現(xiàn)不俗揖膜。
RebbitMQ特性
- 支持多種客戶端誓沸,如Python,Ruby,.NET,java,JMS,C,PHP,ActionScript等
- AMQP的完整實(shí)現(xiàn)(vhost,Exchange,Binding,Routing Key等)
- 事務(wù)支持/發(fā)布確認(rèn)
- 消息持久化
Kafka
- Kafka是一種高吞吐的分布式發(fā)布訂閱消息系統(tǒng),是一個(gè)分布式壹粟,分區(qū)的拜隧,可靠的分布式日志存儲(chǔ)服務(wù)。它通過一種獨(dú)一無二的設(shè)計(jì)提供了一個(gè)消息系統(tǒng)的功能趁仙。
Kafka特性
- 通過O(1)的磁盤數(shù)據(jù)結(jié)構(gòu)提供消息的持久化洪添,這種結(jié)構(gòu)對(duì)于即使數(shù)以TB的消息存儲(chǔ)也能夠保持長(zhǎng)時(shí)間的穩(wěn)定性能
- 高吞吐量:即使是非常普通的硬件Kafka也可以支持每秒數(shù)百萬的消息。