· [Java论坛][安全论坛][数据库论坛][操作系统论坛]
· [专题] 赛迪网2009年度IT经典最红榜获奖名单揭晓
· [专题] 百度被黑的技术原因 数据泄漏暗藏惊人杀机
· [IT技术周刊][IT资源下载专区][病毒求助专区]
· [热点] 投票:瑞星漏洞事件 Google遭袭技术细节曝光
· [热点] 黑客盯上个人隐私信息 视频体验IE8智能搜索

消息中间件和消息服务(JMS) (2)

发布时间:2006.03.22 08:39     来源:huihoo    作者:神灯


3.JMS消息模型
JMS 消息由以下几部分组成:消息头,属性,消息体。
  
3.1 消息头(Header) - 消息头包含消息的识别信息和路由信息,消息头包含一些标准的属性如:JMSDestination,JMSMessageID 等。

 消息头

 由谁设置

JMSDestination

send 或 publish 方法

JMSDeliveryMode

send 或 publish 方法

JMSExpiration

send 或 publish 方法

JMSPriority

send 或 publish 方法

JMSMessageID

send 或 publish 方法

JMSTimestamp

send 或 publish 方法

JMSCorrelationID

客户

JMSReplyTo

客户

JMSType

客户

JMSRedelivered

JMS Provider

 

 

      
 

 

 

      
3.2 属性(Properties) - 除了消息头中定义好的标准属性外,JMS 提供一种机制增加新属性到消息头中,这种新属性包含以下几种:
   1. 应用需要用到的属性;
   2. 消息头中原有的一些可选属性;
   3. JMS Provider 需要用到的属性。
   标准的JMS 消息头包含以下属性:

JMSDestination

消息发送的目的地

JMSDeliveryMode

传递模式, 有两种模式: PERSISTENT 和NON_PERSISTENT,PERSISTENT 表示该消息一定要被送到目的地,否则会导致应用错误。NON_PERSISTENT 表示偶然丢失该消息是被允许的,这两种模式使开发者可以在消息传递的可靠性和吞吐量之间找到平衡点。

JMSMessageID

唯一识别每个消息的标识,由JMS Provider 产生。

JMSTimestamp

一个消息被提交给JMS Provider 到消息被发出的时间。

JMSCorrelationID

用来连接到另外一个消息,典型的应用是在回复消息中连接到原消息。

JMSReplyTo

提供本消息回复消息的目的地址

JMSRedelivered

如果一个客户端收到一个设置了JMSRedelivered 属性的消息,则表示可能该客户端曾经在早些时候收到过该消息,但并没有签收(acknowledged)。

JMSType

消息类型的识别符。

JMSExpiration

消息过期时间,等于QueueSender 的send 方法中的timeToLive 值或TopicPublisher 的publish 方法中的timeToLive 值加上发送时刻的GMT 时间值。如果timeToLive值等于零,则JMSExpiration 被设为零,表示该消息永不过期。如果发送后,在消息过期时间之后消息还没有被发送到目的地,则该消息被清除。

JMSPriority

消息优先级,从0-9 十个级别,0-4 是普通消息,5-9 是加急消息。JMS 不要求JMS Provider 严格按照这十个优先级发送消息,但必须保证加急消息要先于普通消息到达。

 

 

 

 

 

 

 

 


3.3 消息体(Body) - JMS API 定义了5种消息体格式,也叫消息类型,你可以使用不同形式发送接收数据并可以兼容现有的消息格式,下面描述这5种类型:

消息类型

消息体

TextMessage

java.lang.String对象,如xml文件内容

MapMessage

名/值对的集合,名是String对象,值类型可以是Java任何基本类型

BytesMessage

字节流

StreamMessage

Java中的输入输出流

ObjectMessage

Java中的可序列化对象

Message

没有消息体,只有消息头和属性











下例演示创建并发送一个TextMessage到一个队列:
TextMessage message = queueSession.createTextMessage();
message.setText(msg_text); // msg_text is a String
queueSender.send(message);

下例演示接收消息并转换为合适的消息类型:
Message m = queueReceiver.receive();
if (m instanceof TextMessage) {
 TextMessage message = (TextMessage) m;
 System.out.println("Reading message: " + message.getText());
} else {
 // Handle error
}

4. 消息的同步异步接收
   消息的同步接收是指客户端主动去接收消息,JMS 客户端可以采用MessageConsumer 的receive方法去接收下一个消息。
   消息的异步接收是指当消息到达时,主动通知客户端。JMS 客户端可以通过注册一个实 现MessageListener 接口的对象到MessageConsumer,这样,每当消息到达时,JMS Provider 会调用MessageListener中的onMessage 方法。

<<上一页 1 2 3 下一页>>


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· 第一章 Java 的起源 (03-21) · 专题:JAVA技术的高聚合体——JIVE (03-21)
· TOMCAT下的JIVE2的中文问题的报告 (03-20) · jive设计思路 (03-20)
· jive中可以改进的两点 (03-20) · 内容格式化示例 (03-20)
· Jive中Jdom使用剖析 (03-20) · 使您的Jive搜索支持中文 (03-20)
· 使用正则表达式让你的jive显示图片 (03-20) · Jive的中文问题及解决办法 (03-20)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
资讯 通信 IT产品 IT技术 信息化
微软Spark计划:技术点燃梦想
·深度观察:高世代线密集..
·专题:颠覆还是倒退?苹果..
·专题:如何让网络个人信..
专题:动力100——助企业轻松实现立体沟通
·专题:三大运营商"扎堆"..
·专题:谷歌推智能手机Ne..
·直播:2010年中国通信技..
专题:回顾2009 原装耗材与兼容耗材发展
·专题:HP Photosmart Pl..
·专题:超薄超强 戴尔推..
·2009赛迪网年终评选 惠..
无处不挂马 2010年网页挂马大爆发之年
·龙存科技:由BizSpark成..
·易城蓝天宋晨枫:硅谷创..
·采访BizSpark计划创业企..