JMS消息详解

原创 2006年06月09日 23:40:00
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

相关文章推荐

深入浅出JMS(一)--JMS基本概念

摘要:JMS(JAVA Message Service,java消息服务)API是一个消息服务的标准或者说是规范,允许应用程序组件基于JavaEE平台创建、发送、接收和读取消息。它使分布式通信耦合度更...

JMS五种消息的发送/接收的例子

1、消息发送 Java代码   //连接工厂   ConnectionFactory connFactory = new ActiveMQConnectionFactory( ...
  • hjxgood
  • hjxgood
  • 2014年02月22日 17:22
  • 2884

ActionMQ5.8.0 JMS实例 手把手详细图解

ActionMQ 是开源的JMS实现 1.下载ActiveMQ 去官方网站下载:http://activemq.apache.org/ 2.运行ActiveMQ ...

JMS与MQ详解

《一》 1.ActiveMQ概述     企业消息软件从80年代起就存在,它不只是一种应用间消息传递风格,也是一种集成风格。因此,消息传递可以满足应用间的通知和互相操作。但是开源的解决方案...

深入浅出JMS(一)——JMS简介

      如果手机只能进行实时通话,没有留言和短信功能会怎么样?一个电话打过来,正好没有来得及接上,那么这个电话要传递的信息肯定就收不到了。为什么不能先将信息存下来,当用户需要查看信息的时候再去...

JMS工作原理

为什么需要JMS 用RPC中间件技术已广泛应用于分布式系统之间的通信,但是这些技术也显示出了局限性: 同步通信:客户发出调用后,必须等待服务对象完成处理并返回结果后才能继续执行 客户和服务对象的生命...
  • p_zick
  • p_zick
  • 2016年07月15日 01:44
  • 1339

深入掌握JMS(八):JMSReplyTo

    在下面的例子中,首先创建两个Queue,发送者给一个Queue发送,接收者接收到消息之后给另一个Queue回复一个Message,然后再创建一个消费者来接受所回复的消息。import java...

JMS消息内部结构学习笔记

The JMS message is the most important concept in the JMS specification. Every concept in the JMS spe...
  • canot
  • canot
  • 2016年12月15日 21:14
  • 571

JMS(Java消息服务)简单示例

Java消息服务指的是两个应用程序之间进行异步通信的API,它为标准消息协议和消息服务提供了一组通用接口,包括创建、发送、读取消息等,用于支持JAVA应用程序开发。在J2EE中,当两个应用程序使用JM...

Spring ORM+Hibernate?Out!换 Spring Data JPA 吧!

Spring Data JPA 的目标是通过让一些必须的工作变得更简单,来极大的提高数据访问层的实现效率。通常我们只需要姐访问方法,而 Spring 给你提供自动实现。! 在一切开始之前,先举个简单的...
  • anxpp
  • anxpp
  • 2016年05月15日 06:56
  • 33385
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JMS消息详解
举报原因:
原因补充:

(最多只允许输入30个字)