中間件基本概念
什麼是中間件?
非底層操作系統軟件,非業務應用軟件,不是直接給最終用戶使用的,不能直接給客戶帶來價值的軟件統稱爲中間件。
什麼是消息中間件?
關注於數據的發送和接受,利用高效可靠的異步消息傳遞機制集成分佈式系統。
什麼是JMS?
Java消息服務(Java Message Service)即JMS,是一個Java平臺中關於面向消息中間件的API,用於在兩個應用程序之間,或分佈式系統中發送消息,進行異步通信。
什麼事AMQP?
AMQP(advanced message queuing protocol)是一個提供統一消息服務的應用層標準協議,基於此協議的客戶端與消息中間件可傳遞消息,並不受客戶端/中間件不同產品,不同開發語言等 條件的限制。
常見消息中間件對比
ActiveMQ
ActiveMQ是Apache公司出品,最流行的,能力強勁的開源消息總線。ActiveMQ是一個完全支持JMS1.1和J2EE1.4規範的JMS Provider實現,儘管JMS規範出臺已經是很久的事情了,但是JMS在當今的J2EE應用中間仍然扮演者特殊的地位。
特性:
多種語言和協議編寫客戶端。語言:Java,C,C++,C#,Rubt,Perl,Python,PHP。應用協議:OpenWire,Stomp REST,WS Notification,XMPP,AMQP
完全支持JMS1.1和J2EE 1.4規範(持久化,XA消息,事務)
虛擬主題、組合目的、鏡像隊列
消息持久化
RabbitMQ
RabbitMQ是一個開源的AMQP實現,服務端採用Erlang語言編寫。用於在分佈式系統中存儲轉發消息,在易用性、擴展性、高可用性等方面表現不俗。
特性:
支持多種客戶端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript等
AMQP的完整實現(vhost、Exchange、Binding、Routing Key等)
事務支持/發佈確認
消息持久化
主要用於金融行業,對安全性穩定性要求極高!
Kafka
Kafka是一種高吞吐量的分佈式發佈訂閱消息系統,是一個分佈式的、分區的、可靠的分佈式日誌存儲服務。它通過一種獨一無二的設計提供了一個消息系統的功能。
特性:
通過O(1)的磁盤數據結構提供消息的持久化,這種結構對於即使數以TB的消息村住也能狗保持長時間的穩定性能
高吞吐量:即使是非常普通的硬件,Kafka也可以支持每秒數以百萬的消息。
Partition、Consumer Group
JMS相關概念:
提供者:實現JMS規範的消息中間件服務器
客戶端:發送或接收消息的應用程序
生產者/發佈者:創建併發送消息的客戶端
消費者/訂閱者:接收並處理消息的客戶端
消息:應用程序之間傳遞的數據內容
消息模式:在客戶端之間傳遞消息的方式,JMS中定義了主題和隊列兩種模式
隊列模式:
客戶端包括生產者和消費者
隊列中的消息只能被一個消費者消費
消費者可以隨時消費隊列中的消息
主題模型
客戶端包括髮布者和訂閱者
主題中的消息被所有訂閱者消費
消費者不能消費訂閱之前就發送到主題中的消息
JMS編碼接口
ConnectionFactory 用於創建連接到消息中間件的連接工廠
Connection 代表了應用程序和消息服務器之間的通信鏈路
Destination 指消息發佈和接收的地點,包括隊列或主題
Session 表示一個但縣城的上下文,用於發送和接收消息
MessageConsumer 由會話創建,用於接收發送到目標的消息
MessageProducer 由會話創建,用於發送消息到目標
Message 是在消費者和生產者之間傳送的對象,消息頭,一組消息屬性,一個消息體