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的转换
由于时间的原因我就先写到这里.写这个的时候我主要参考了JavaEE 的APi 我用的1.4版本的,1.5的也可以。这个随便选择。还有dom4j? APIJ2EE 1.5api.CHMJ2EE 1.4api.CHMdom4j 1.6.1 API.chm
至于j2se 的API的我提供了。由于文件稍大一些,上传比较费时间,所以我就不上传了。如果需要大家可以留言。
最后嗦一句,我没有把我测试的源码贴在这里是因为,我还没有整理好。代码比较乱,所以不敢再次献丑,^_^。因为我测试了好几段程序,所以 注释了好多地方,看起来比较乱。以后有时间我就贴上来。大家有什么小问题,我们可以探讨。我也欢迎我们大家共同进步。
转载自:http://blog.csdn.net/ecjtuxuan/archive/2009/07/26/4382126.aspx