昨天用了一天時間瞭解了一下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特點:
每個消息只有一個消費者,意思就是說,消息一旦被消費,消息就不再在存在於消息隊列中。
發送者和接收者之間在時間上沒有依賴性,也就是說當發送者發送了消息之後,不管接收者有沒有正在運行,它不會影響到消息被髮送到隊列。
- Pub/Sub(1對N通訊,N>=0):
發佈者(發送消息方)將消息發送到主題。多個發佈者將消息發送到Topic,系統將這些消息傳遞給多個訂閱者。
Pub/Sub特點:
1對N通訊。
發佈者和訂閱者之間有時間上的依賴性。就是說沒有發佈者就是沒有訂閱者。
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)即可實現跨平臺。
啊噶啦哇呀!吃飯時間,放下奶茶~