ActiveMq 小結


     之所以將題目 成爲ActiveMq小結 是因爲 最近我做的一個項目用到了JMS 然後我採用了開源的MQ 這個,但因爲時間比較緊,所以 我暫時沒有花太多的時間去研究它。不過也看了一些網友的文章,給了我許多的提醒。在此表示感謝,爲了,讓以後想用這個開源MQ的人 少走一些彎路,我準備寫一個小結。如果有什麼不明白的地方,歡迎給大家給我留言,我們可以共同探討。

小結主要包括個人看的一些網上文章,我覺得寫的還好的一些,有一些比較零散的我就不介紹了

JMS消息詳解:

Message有三個主要組成部件:標頭、主體和屬性
一、消息標頭:
消息標頭是消息的信封,包含爲使消息到達目的地所需要的所有信息,可以直接控制其中一些字段的值,其它值則由JMS提供程序填寫。
JMSDestination:
由Send方法設置。指定消息的目的地,由JMS提供程序填寫
JMSDeliveryMode:
          由Send方法設置。提交消息的模式-持續或非持續。發送消息後JMS提供程序填寫該字段。
JMSMessageID:
         Send 方法設置。包含消息的唯一標識符。發送過程中由JMS提供程序填寫
JMSTimeStamp:
          Send 方法設置。記錄消息被傳遞給send方法的時間。發送過程中由JMS提供程序填寫
JMSCorrelationID:
         由客戶端設置。包含用於將消息連接在一起的ID。客戶端一般將其置爲所引用消息的ID
JMSReplyTo:
         由客戶端設置。響應消息的目的地,如果客戶端期望得到響應消息,則填寫該字段
JMSRedelivered:
         由JMS提供程序設置。指出該消息先前被髮送過
JMSType:
         由客戶端設置。包含由客戶端提供的消息類型標識符。是否需要該字段,不同的提供程序有不同要求
JMSExpiration:
          Send 方法設置。一個根據客戶端提供的年齡計算出來的值,如果GMT比該過期值晚,則銷燬消息
JMSPriority:
         Send 方法設置。包含客戶端在發送消息時所設置有限級值
二、消息屬性
除了上面的屬性,還可以自定義屬性,以便進行消息的選擇
一般通過setXXXProperty方法來定義消息屬性,XXX取值爲:Boolean、Byte、Double、Float、Int、Long、Object、Short及String。
每一屬性均由字符串名字和相關的值組成
TextMessage msg = tsession.createTextMessage();
msg.setStringProperty(“CUSTOMER_NAME”,”MyCustomer”);
String customer = msg.getStringProperty(“CUSTOMER_NAME”);
三、消息主體
    包含了消息的核心數據。
    JMS 定義了5中消息類型:
    TextMessage 、MapMessage、BytesMessage、StreamMessage、ObjectMessage
    選擇最合適 的消息類型可以使JMS最有效 的處理消息。
1. 文本消息 TextMessage
將數據作爲簡單字符串存放在主體中(XML就可以作爲字符串發)
TextMessage msg = session.createTextMessage();
msg.setText(text);
有些廠商支持一種XML專用的消息格式,帶來了便利,但是不是標準的JMS類型,影響移植性
只自己定義了兩個方法setText(String s)、getText()
2. 映射表消息 MapMessage
使用一張映射表來存放其主體內容
參照Jms API
MapMessage msg = session.createMapMessage();
msg.setString(“CUSTOMER_NAME”,”John”);
msg.setInt(“CUSTOMER_AGE”,12);
String s = msg.getString(“CUSTOMER_NAME”);
int age = msg.getInt(“CUSTOMER_AGE”);
3. 字節消息 BytesMessage
將字節流存放在消息主體中。適合於下列情況:必須壓縮發送的大量數據、需要與現有消息格式保持一致等
參照Jms API
byte[] data;
BytesMessage msg = session.createBytesMessage();
msg.wirte(data);
byte[] msgData = new byte[256];
int bytesRead = msg.readBytes(msgData);
4. 流消息 StreamMessage
用於處理原語類型。這裏也支持屬性字段和MapMessage所支持的數據類型。
使用這種消息格式時,收發雙發事先協商好字段的順序,以保證寫讀順序相同
參照Jms API
StringMessage msg = session.createStreamMessage();
msg.writeString(“John”);
msg.writeInt(12);
String s = msg.readString();
        int age = msg.readInt();
5. 對象消息 ObjectMessage
用於往消息中寫入可序列化的對象。
消息中可以存放一個對象,如果要存放多個對象,需要建立一個對象集合,然後把這個集合寫入消息。
客戶端接收到一個ObjectMessage時,是read-only模式。如果一個客戶端試圖寫message,將會拋出MessageNotWriteableException。如果調用了clearBody方法,message既可以讀又可以寫
自己只單獨定義了兩個方法:getObject()和setObject(Serializable s)
ObjectMessage包含的只是object的一個快照,set之後object的修改對ObjectMessage的body無效
Message只讀時被set拋出MessageNotWriteableException;
set和get時,如果對象序列化失敗拋出MessageFormatException

這裏我轉載一篇文章,網址如下:

http://shenzhenchufa.blog.51cto.com/730213/171710

這裏有一寫具體的實例,大家可以借鑑一下,由於這次我沒有用到Spring集成那部分,所以我再次就不多介紹了,大家自己可以查一下相應的資料。

MS、XML 和異構企業

下面這個網址是我IBM developerworks網站的一篇文章。希望可以給大家拓展思路

http://www.ibm.com/developerworks/cn/xml/heterogeneous/index.html

因爲我這次也是想傳遞一個XML的文件,然後來解析,提取其中自己需要的那部分。

我採用的XML解析的技術是Dom4J,技術有很多種,大家可以選擇自己熟悉的一種。其實這裏面很重要的一個應用就是

字符串與XML的轉換



    // XML轉字符串
  Document document = ...;
    String text = document.asXML();
// 字符串轉XML
    String text = <person> <name>James</name> </person>;
    Document document = DocumentHelper.parseText(text);
 在這裏如果大家對用Dom4j操作XML不瞭解,可以參考:
http://xhy0422.javaeye.com/blog/50235
至於ActiveMq具體是什麼東東,再次我就不介紹了,網上很多介紹這個的。大家也可以到它的官方網站上去看。
我在這裏想說的一點就是ActiveMq的 API ,由於我沒有找到可以下載的API 所以只能在線看,地址如下:
http://activemq.apache.org/maven/activemq-core/apidocs/
由於時間的原因我就先寫到這裏.
寫這個的時候我主要參考了JavaEE 的APi 我用的1.4版本的,1.5的也可以。這個隨便選擇。
還有dom4j  API
J2EE 1.5api.CHM
J2EE 1.4api.CHM
dom4j 1.6.1 API.chm
至於j2se 的API的我提供了。由於文件稍大一些,上傳比較費時間,所以我就不上傳了。如果需要大家可以留言。

最後囉嗦一句,我沒有把我測試的源碼貼在這裏是因爲,我還沒有整理好。代碼比較亂,所以不敢再次獻醜,^_^。
因爲我測試了好幾段程序,所以 註釋了好多地方,看起來比較亂。以後有時間我就貼上來。
大家有什麼小問題,我們可以探討。我也歡迎我們大家共同進步。

 

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