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与MQ详解

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

JMS与MQ详解(二)

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

ActiveMQ消息特性:消息属性

消息属性的说明: queue的消息默认是持久化的消息的优先级默认是4消息发送时设置了时间戳消息的过期时间默认是永不过期,过期的消息进入DLQ,可以配置DLQ及其处理策略如果消息时重发的,将会...
  • KimmKing
  • KimmKing
  • 2012年12月23日 17:21
  • 12289

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

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

JMS消息选择器selector

业务场景:A系统通过一个队列(假定队列名是queueA)向B系统发送消息,后来业务调整,B系统拆分为两个系统B1,B2,分别处理不同的业务,并且分别都需要从queueA中获取不同的消息。为了不改变A系...
  • xtj332
  • xtj332
  • 2014年01月03日 11:16
  • 6243

JMS消息传送机制

JMS不仅需要高效的存储消息,还需要确保消息能够无误的被传输.这就需要JMS提供一种"保证传送"机制和事务.如果抛开JMS的规范,那么它的技术实现本身就是网络IO + 文件存储;其中网络IO的困境就在...
  • wangtaomtk
  • wangtaomtk
  • 2016年05月29日 12:11
  • 1141

jms中消息接收的实现原理

消息驱动Bean  驱动Bean (MDB) 提供了一个实现异步通信比直接使用Java消息服务(JMS)更容易地方法。创建MDB接收异步JMS消息。容器处理为JMS队列和主题所要求加载处理的大部分工作...
  • asdfsadfasdfsa
  • asdfsadfasdfsa
  • 2017年01月05日 10:48
  • 942

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

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

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

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

深入掌握JMS(八):JMSReplyTo

    在下面的例子中,首先创建两个Queue,发送者给一个Queue发送,接收者接收到消息之后给另一个Queue回复一个Message,然后再创建一个消费者来接受所回复的消息。import java...
  • zhangxs_3
  • zhangxs_3
  • 2009年03月29日 23:00
  • 13860
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JMS消息详解
举报原因:
原因补充:

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