開源消息總線ActiveMQ

1、消息中間件MOM(Message-Oriented Middleware)java

    消息中間件是解決異步分佈式系統中通信和排隊問題的中間件技術。它利用高效可靠的消息傳遞機制進行平臺無關的數據交流,並基於數據通訊來進行分佈式系統的集成。經過提供消息傳遞和消息排隊模型,它可以在分佈式環境下擴展進程間的通訊。
node

2、JMS
web

    JMS即Java消息服務(Java Message Service)應用程序接口是一個Java平臺中關於面向消息中間件(MOM)的API,用於在兩個應用程序之間,或分佈式系統中發送消息,進行異步通訊。Java消息服務是一個與詳細平臺無關的API,絕大多數MOM提供商都對JMS提供支持。
ajax


  JMS 定義了兩種方式:Quere(點對點);Topic(公佈/訂閱)。 ConnectionFactory 是鏈接工廠,負責建立Connection。 Connection 負責建立 Session。  Session 建立 MessageProducer(用來發消息) 和 MessageConsumer(用來接收消息)。  Destination 是消息的目的地。
數據庫

3、ActiveMQ瀏覽器

一、概述網絡

    ActiveMQ 則是MOM的一個跨語言跨平臺實現,它是Apache出品,最流行的、能力強勁的開源消息總線。它完整實現了JMS1.1和J2EE1.4中JMS服務(JSM定義了MOM系統的服務和接口,可以提供可靠的消息傳輸、事物和過濾等服務),還具有了集羣、事物、存儲轉發、持久化等企業特性。
架構

二、鏈接方式
異步

    ActiveMQ提供了豐富鏈接方式,依照耦合的緊密程度可以分爲:直接內嵌於JBoss等J2EE容器,直接利用AMOP、Openwire等標準協議,經過適配器與Java、C++、AJAX等程序鏈接以及橋式鏈接其它JMS。socket

三、特性及其做用

處理事務性的消息
    ActiveMQ的此種特性主要管理消息的事務以及消息持久化,即便在出錯時也不會漏掉一條消息。消息server需要進行信息持久化,一個server集羣可以提升其可用性,ActiveMQ正是這種一個高可用性的消息server,典型的狀況就是當一個Server Node掉線的時候,它上面的所有消息都會被保存下來,以便在它又一次上線時繼續處理。
高性能的數據分發
    ActiveMQ的這個特性主要關注的是消息的吞吐率以及高效的消息投遞路由,中心思想就是在一個大的網絡中儘量快的傳遞大量的並且高速改變的消息數據。
鑑於大量的數據和頻繁的數據數據交換負荷很是高,因此這樣的狀況下很是少使用數據持久化,在失敗時丟失幾條數據也是可以接受的因爲老的數據一般都再也不被需要了,最新的數據纔是真正咱們關心的。
集羣和通用的異步消息模型
    ActiveMQ的這樣的特性重點在網絡延遲和速度,當實現一個web或者EJB集羣的時候,目的是維護一個node集羣,典型的是使用多點廣播來discovery&keep-alive而後使用socket直接鏈接這些node來進行高效的通訊。這和使用JMS provider在EJB-Style或者WS-style的服務中做爲RMI層是很是類似的,都能使用多點廣播來discovery&keep-alive並且使用socket直接鏈接通訊以下降延遲。因此與其使用不一樣的server來協調client之間的通訊,不如讓client直接和彼此通訊來下降延遲。
Ps: 此段主要講的是activeMQ的node之間會有高效的異步通訊機制,網絡延遲小並且高效
網絡數據流
    ActiveMQ的這樣的特性關注點是activeMQ的ajax支持,愈來愈多的人但願數據流能實時的傳遞到網絡瀏覽器中,好比金融行業的股票價格數據,實時的在展現IM會話,實時拍賣並且動態更新內容和消息。鑑於這樣的狀況,咱們把ActiveMQ集成到了web容器中來提供封閉的網絡集成,使用HTTP POSTS來公佈消息並且在js中經過HTTP GET來接受並展現消息。
簡易的使用HTTP來傳遞消息的API
    ActiveMQ的這樣的特性主要關注跨語言跨技術的鏈接能力,咱們爲message broker提供了一個HTTP接口贊成跨語言或者技術來進行簡單的發送和接受消息。使用HTTP POST將消息發送到message broker,使用HTTP GET從message broker獲取消息,使用URI並且指定參數來決定接受/發送的目的地。
四、系統架構

    ActiveMQ內部實現採用的是分層和插件相結合的系統架構,從內到外一共可以分爲三層,各自是JMS核心層、接口層和插件層。

    JMS核心層:是JMSserver端的實現,完整支持JMS1.1和J2EE1.4規範,可以部署到不論什麼兼容J2EE1.4以上的J2EE容器上。

    接口層: 對外提供接口。可以分爲通訊接口、消息保存接口和網絡服務接口三個子模塊。

                     通訊接口負責網絡鏈接和消息傳輸,經過分佈式命令模式解除了消息內容和通訊載體的緊耦合關心,以便於消息在網絡中進行傳輸。它與各類協議插件一塊兒完畢消   息在JMSclient與server端和不一樣JMS之間的傳輸,由於插件應用層次的不一樣ActiveMQ擁有三種自底向下的網絡通訊能力:TCP、UDP、SSL、NIO、JATX等底層絡傳輸;OpenWire、Stomp Rest、WS Notification、XMPP、AMQP等標準協議鏈路;Java、C、C++、C#、Ruby、Perl、Python、PHP、AJAX等語言級交互通道。

                     消息保存接口可以支持內存、文件、內嵌數據庫和外部數據庫等四種消息持久化方式。

                     網絡服務接口是高級功能的接口,支持存儲轉發、集羣、命令服務等。

    插件層:由不一樣的 插件構成向外提供隊列、集羣等服務。

五、核心數據流

     JMS是發送消息的java中發送消息的中間件,包含5中數據流: · 

      StreamMessage -- Java原始值的數據流 · 

      MapMessage--一套名稱-值對 · 

      TextMessage--一個字符串對象 · 

      ObjectMessage--一個序列化的 Java對象 ·

      BytesMessage--一個未解釋字節的數據流

相關文章
相關標籤/搜索