JMS-ActiveMQ

昨天用了一天時間瞭解了一下JMS(Java Message Service,Java消息服務)嗯嗯感覺這東西感覺蠻好玩的。


JMS是什麼鬼呢?

JMS是一個用於提供消息服務的技術規範,它制定了在整個消息服務提供過程中的所有數據結構和交互流程。

噢?(不明白??喝杯奶茶!)

就是說,大家可以把JMS理解成Java平臺上的一個標準或者說是一個協議。該標準或協議制定了兩個應用程序之間,或分佈式系統中如何發送消息,進行異步通信的規則。這樣子就好理解多了~


ActiveMQ又是什麼鬼

噢?

那ActiveMQ又是什麼鬼,爲啥標題寫成JMS-ActiveMQ,兩者有什麼關係嗎?哈哈!你別說,兩者可真有關係。

JMS通常用於企業級應用的消息傳遞,主要以Point-to-Point(P2P)、Publish/Subscribe(Pub/Sub)兩種通訊模式進行消息傳遞。而ActiveMQ則是一個JMS的實現, 是Apache出品的開源消息總線,其中MQ(Message Queue,消息隊列)表示的是,該實現是一種應用程序對應用程序的通信方法,是面向消息中間件(MOM)的最終實現,是真正的服務提供者。

MQ實現的通訊方法正是上面所提及的P2P、Pub/Sub通訊機制,至於怎麼實現的呢?我們來看看這兩個通訊模式的模式圖:

  • P2P(1對1通訊):

每個消息都被髮送者發送到一個特定的隊列,接收者從隊列中獲取消息。隊列保留着消息,直到他們被消費或超時。

這裏寫圖片描述

P2P特點:

  1. 每個消息只有一個消費者,意思就是說,消息一旦被消費,消息就不再在存在於消息隊列中。

  2. 發送者和接收者之間在時間上沒有依賴性,也就是說當發送者發送了消息之後,不管接收者有沒有正在運行,它不會影響到消息被髮送到隊列。

    • Pub/Sub(1對N通訊,N>=0):

發佈者(發送消息方)將消息發送到主題。多個發佈者將消息發送到Topic,系統將這些消息傳遞給多個訂閱者。

這裏寫圖片描述

Pub/Sub特點:

  1. 1對N通訊。

  2. 發佈者和訂閱者之間有時間上的依賴性。就是說沒有發佈者就是沒有訂閱者。


java具體實現

說這麼多,光懂理論沒啥用,還不如實踐一下~。

前面我們討論過JMS只是服務接口,並沒有給予實現,實現JMS接口的消息中間節成正是ActiveMQ。

JMS編程:

對象/接口 主要內容
ConnectionFactory 連接工廠,JMS用它創建連接。
Connection JMS客戶端到ActiveMQ的連接。
Destination 消息的目的地。既是消息生產者的消息發送目標(QUEUE/TOPIC)或消息消費者的消息來源(QUEUE/TOPIC)。
Session Session會話,老生常談了,一個發送或接收消息的就事句柄。
MessageProducer 由Session對象創建的用來發布送消息的對象。
MessageConsumer 由Session對象創建的用來接收消息的對象。
Acknowledge 簽收。
Transaction 事務。

JMS-ActiveMQ VS WebSocket

噢?

瞭解過WebSocket的朋友肯定會問,JMS-ActiveMQ與WebSocket有什麼不同呀。大家都能實現某種通訊功能。

WebSocket協議實時通信技術原理:
http://blog.csdn.net/for_anmin/article/details/78549226

從概念來說,WebSocket是 HTML5的一種傳輸協議,實時,全雙工通信,長連接,實現前臺向後臺,後臺向前臺發出請求。ActiveMQ是消息中間件,主要實現是隊列,用於處理消息,用於跨平臺、分佈式或跨應用進行消息通訊。但是。。。(But…),ActiveMQ 5.9版後支持基於AMQP、MQTT、OpenWire、Stomp,WS這5種協議的通訊,其中WS既是WebSocket。就是說,我們可以通過Web端進行Java的跨平臺或跨應用通訊了。

備註:

跨平臺/跨應用:不同OS的電腦只要配備Java的運行環境(JVM)即可實現跨平臺。


啊噶啦哇呀!吃飯時間,放下奶茶~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章