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的我提供了。由于文件稍大一些,上传比较费时间,所以我就不上传了。如果需要大家可以留言。

最后啰嗦一句,我没有把我测试的源码贴在这里是因为,我还没有整理好。代码比较乱,所以不敢再次献丑,^_^。
因为我测试了好几段程序,所以 注释了好多地方,看起来比较乱。以后有时间我就贴上来。
大家有什么小问题,我们可以探讨。我也欢迎我们大家共同进步。

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值