1、什麼是消息中間件
- 關注於數據的發送和接收,利用高效可靠的異步消息傳遞機制集成分佈式系統。
2、爲何時候消息中間件
- 1.解耦合
- 2.異步
- 3.橫向擴展
- 4.安全可靠
- 5.順序保證
3、消息中間件方案
- 1.Java消息服務(Java Message Service)即JMS,是一個Java平臺中關於面向消息中間件的API,用於在兩個應用程序之間或分佈式中發送消息,進行異步通訊。
- 2.AMQP(advanced message queuing protocol)是一個提供統一消息服務的應用層標準協議,基於此協議的客戶端與消息中間件可傳遞消息,並不受客戶端/中間件的不一樣產品,不一樣開發語言等條件限制。
JMS與AMQP對比
說明 | JMS規範 | AMQP協議 |
---|---|---|
定義 | java API | wire-protocol |
跨語言 | 否 | 是 |
消息類型 | p2p,pub/sub | direct,fanout,topic,headers,system |
消息類型 | TextMessage,MapMessage,BytesMessage,StreamMessage,ObjectMessage,Message | byte[] |
綜合評價 | JMS定義了Java API層面的標準;在Java體系中,多個clietn都可以經過JMS進行交互,不須要應用修改代碼,可是其對跨平臺的支持較差 | AMQP的主要特徵是面向消息、隊列、路由、可靠性、安全 |
4、經常使用消息中間件
1.ActiveMQ
- 1)多語言和協議客戶端。
- 語言:
- Java、C、C++、C#、Ruby、Perl、Python、PHP
- 協議:
- OpenWire、Stomp、REST、WS、XMPP、AMQP
- 2)徹底支持JMS1.1和J2EE1.4規範(持久化,XA消息和事務)
- 3)虛擬主題、組合目的、鏡像隊列
2.RabbitMQ
- 1)多語言客戶端:
- Java、Python、Ruby、C、PHP等
- 2)事務支持/發佈肯定
- 3)消息持久化
3.Kafka
- 一種高吞吐量的分佈式發佈訂閱消息系統,是一個分佈式、分區的、可靠的分佈式日誌存儲服務。
3個消息中間件的綜合評價
說明 | ActiveMQ | RabbitMQ | Kafka |
---|---|---|---|
跨語言 | 支持(Java優先) | 與語言無關 | 支持(Java優先) |
支持協議 | OpenWire,Stomp,XMPP,AMQP | AMQP | |
優勢 | 遵循JMS規範,安裝部署方便 | 繼承Erlang天生的併發性,用於金融行業,穩定性,安全性有保障 | 依賴ZK,可動態擴展節點,高性能,高吞吐量,無線擴容,消息可指定追溯 |
缺點 | 會莫名丟失消息 | Erlang語言難度較大,不支持動態擴展 | 嚴格的順序機制,不支持消息優先,不支持標準消息協議,不利於平滑遷移 |
總結 | 適合中小型企業級消息應用場景,不適合上千個隊列的應用 | 適合對穩定性要求高的企業級引用 | 通常應用在大數據日誌處理或實時性,可靠性要求稍低的場景。 |