JMS & ActiveMQ小結

JMS簡介

JMS源於企業應用對於消息中間件的需求,使應用程序可以藉助消息進行異步處理而互不影響。Sun公司和它的合作伙伴設計的JMS API定義了一組公共的應用程序接口和相應語法,使得Java程序能夠和其他消息組件進行通信。JMS有四個組成部分:JMS服務提供者、消息管理對象、消息的生產者消費者和消息本身。 
1)JMS服務提供者實現消息隊列和通知,同時實現消息管理的API。JMS已經是J2EE API的一部分,J2EE服務器都提供JMS服務。 
2) 消息管理對象提供對消息進行操作的API。JMS API中有兩個消息管理對象:創建jms連接使用的工廠(ConnectionFactory)和目的地(Destination),根據消息的消費方式的不同ConnectionFactory可以分爲QueueConnectionFactory和TopicConnectionFactory,目的地(Destination)可以分爲隊列(Queue)和主題(Topic)兩種。 
3)消息的生產者和消費者。消息的產生由JMS的客戶端完成,JMS服務提供者負責管理這些消息,消息的消費者可以接收消息。消息的生產者可以分爲――點對點消息發佈者(P2P)和主題消息發佈者(TopicPublisher)。所以,消息的消費者分爲兩類:主題消息的訂閱者(TopicSubscriber)和點對點消息的接收者(queue receiver) 
4)消息。消息是服務提供者和客戶端之間傳遞信息所使用的信息單元。JMS消息由以下三部分組成: 
  a:消息頭(header)――JMS消息頭包含了許多字段,它們是消息發送後由JMS提供者或消息發送者產生,用來表示消息、設置優先權和失效時間等等,並且爲消息確定路由。 
  b:屬性(property)――用來添加刪除消息頭以外的附加信息。 
  c:消息體(body)――JMS中定義了5種消息體:ByteMessage、MapMessage、ObjectMessage、StreamMessage和TextMessage。 


Messages 通信方式 
1)點對點方式(point-to-point) 
   點對點的消息發送方式主要建立在 Message 、Queue、Sender、reciever上,其中Message 是數據載體,Queue 存貯消息,Sender 發送消息,receive接收消息。具體就是Sender Client發送Message到 Queue ,而 receiver Client從Queue中接收消息以及確認消息接收。消息發送客戶端與接收客戶端沒有時間上的依賴,發送端可以在任何時刻發送信息到Queue,且不關注是否有客戶端在消費
2)發佈/訂閱 方式(publish/subscriber Messaging) 
    發佈/訂閱方式適用於多消費端的方式。作爲發佈訂閱的方式,可能存在多個接收客戶端,並且接收客戶端與發送客戶端存在時間上的依賴。一個接收端只能接收他創建以後發送客戶端發送的信息。作爲subscriber ,在接收消息時有兩種方法,destination的receive方法,和實現message listener 接口的onMessage 方法。 


ActiveMQ 是apache的一個開源消息總線。支持JMS1.1 和J2EE 1.4規範,在中間件領域扮演着重要角色。

ActiveMQ 特性:

1.多種語言和協議編寫客戶端。語言: Java,C,C++,C#,Ruby,Perl,Python,PHP。應用協議: OpenWire,Stomp REST,WS Notification,XMPP,AMQP
2. 完全支持JMS1.1和J2EE 1.4規範 (持久化,XA消息,事務)
3. 對Spring的支持,ActiveMQ可以很容易內嵌到使用Spring的系統裏面去,而且也支持Spring2.0的特性
4. 通過了常見J2EE服務器(如 Geronimo,JBoss 4,GlassFish,WebLogic)的測試,其中通過JCA 1.5 resource adaptors的配置,可以讓ActiveMQ可以自動的部署到任何兼容J2EE 1.4 商業服務器上
5. 支持多種傳送協議:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
6. 支持通過JDBC和journal提供高速的消息持久化
7. 從設計上保證了高性能的集羣,客戶端-服務器,點對點
8. 支持Ajax
9. 支持與Axis的整合
10.可以很容易得調用內嵌JMS provider,進行測試

配上ActiveMQ的入門實例,可以讓你快速瞭解MQ的工作原理。


生產者向JMS發送消息的步驟 
1. 創建連接使用的工廠類JMS ConnectionFactory 
2. 使用管理對象JMS ConnectionFactory建立連接Connection 
3. 使用連接Connection 建立會話Session 
4. 使用會話Session和管理對象Destination創建消息生產者MessageSender 
5. 使用消息生產者MessageSender發送消息 
消費者從JMS接受消息的步驟 
1. 創建連接使用的工廠類JMS ConnectionFactory 
2. 使用管理對象JMS ConnectionFactory建立連接Connection 
3. 使用連接Connection 建立會話Session 
4. 使用會話Session和管理對象Destination創建消息消費者MessageReceiver 
5. 使用消息消費者MessageReceiver接受消息,需要用setMessageListener將MessageListener接口綁定到MessageReceiver,
消息消費者必須實現了MessageListener接口,需要定義onMessage事件方法。 


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