之所以将题目 成为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的我提供了。由于文件稍大一些,上传比较费时间,所以我就不上传了。如果需要大家可以留言。
最后啰嗦一句,我没有把我测试的源码贴在这里是因为,我还没有整理好。代码比较乱,所以不敢再次献丑,^_^。
因为我测试了好几段程序,所以 注释了好多地方,看起来比较乱。以后有时间我就贴上来。
大家有什么小问题,我们可以探讨。我也欢迎我们大家共同进步。
转载自:http://blog.csdn.net/ecjtuxuan/archive/2009/07/26/4382126.aspx
分享到:
相关推荐
尚硅谷周阳activemq脑图,
小结 通过以上步骤,我们完成了基于Springboot的ActiveMQ简单发送和监听接收的配置。这是一个基础版本,实际应用中可能需要处理更多复杂场景,如错误重试、消息确认、事务管理等。了解这些基础后,你可以根据需求...
### 开源项目研究与应用小结 #### 一、引言 随着信息技术的快速发展与互联网技术的普及,开源软件在企业级应用中的地位越来越重要。《开源项目研究与应用小结》这一文档提供了关于高并发敏捷WEB架构、消息队列/...
目录 第一部分spring的核心 第1章开始spring之旅 1.1spring是什么 1.2开始spring之旅 1.3理解依赖注入 ...1.5小结 ...2.6小结 ...3.7小结 ...4.6小结 ...5.8小结 ...6.5小结 ...7.7小结 ...8.6小结 ...9.6小结 ...b.4小结
第一部分 Spring的核心 第1章 开始Spring之旅 1.1 Spring是什么 1.2 开始Spring之旅 1.3 理解依赖注入 1.3.1 依赖注入 1.3.2 DI应用 1.3.3 企业级应用中的依赖注入 1.4 应用AOP ...B.4 小结
第一部分 Spring的核心 第1章 开始Spring之旅 1.1 Spring是什么 1.2 开始Spring之旅 1.3 理解依赖注入 1.3.1 依赖注入 1.3.2 DI应用 1.3.3 企业级应用中的依赖注入 1.4 应用AOP ...B.4 小结
在本文中,我们将探讨两种使用Java实现消息队列的方式,分别是利用Spring消息模板发送消息和使用Apache ActiveMQ官方实例。 1. Spring消息模板发送消息 Spring框架提供了对JMS的强大支持,其中包括一个名为`...
RabbitMQ面试题22道 本文将对RabbitMQ面试题进行总结和分析,从中提炼出重要的知识点。...小结 RabbitMQ面试题涵盖了MQ的概念、优点、缺点、应用场景等方面的知识点。了解这些知识点对于开发和使用MQ至关重要。
### 小结 Spring 4.2中的Server-Sent Events支持为开发人员提供了强大的工具,使得实现实时数据更新变得简单。通过使用`SseEmitter`类,可以轻松地将实时数据推送给客户端。此外,结合消息队列如ActiveMQ,还可以...
### 小结 以上为视频教程中所涉及的各个知识点,涵盖了分布式系统架构、工程结构、服务接口定义、第三方支付系统架构的细节,以及相关的技术点和部署架构。本教程通过具体的支付系统实例,详细讲解了在实际应用中...
#### 小结 - **学习经验** 学习这些概念时,重要的是理解每个概念的核心价值和应用场景。实践中尝试使用不同的技术可以帮助更好地掌握它们之间的差异。 - **工作经验** 在实际项目中灵活运用这些概念和技术,...