`
m635674608
  • 浏览: 4954486 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

JMS 消息体

    博客分类:
  • MQ
 
阅读更多
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
分享到:
评论

相关推荐

    ActiveMQ基础知识

    JMS消息结构主要包括以下几个部分: 1.5.1 消息头(Header) * Message ID:是指消息的唯一标识符。 * Correlation ID:是指关联消息的标识符。 * Reply To:是指回复消息的目的地。 * Type:是指消息的类型。 ...

    C#实现同Active MQ通讯的方法

    本文实例讲述了C#实现同Active MQ通讯的方法。分享给大家供大家参考...Message 由消息头,属性和消息体三部份组成。 Active MQ支持过滤机制,即生产者可以设置消息的属性(Properties),该属性与消费者端的Selector对

    java版商城源码下载-RabbitMQ:兔MQ

    java版商城源码下载 AMQP AMQP vs JMS jms是java的消息服务,属API规范,类似JDBC。jms有点对点、发布订阅两种模式,支持...body就是消息体内容。 virtual host:虚拟主机,用于进行逻辑隔离,最上层的消息路由。一个v

    使用WebSphereESB构建企业服务总线,第3部分

    本文内容包括:引言场景设计服务提供程序中介模块完成解决方案结束语下载参考资料在本系列文章的前两篇文章中,我们讨论了WebSphereESB的关键功能,并介绍了JMS之间的消息交换,现在,我们通过在混合体中添加Web服务...

    MultifunctionalChat_MiddlewareProject

    MultifunctionalChat_...点击人或群聊后跳转至此页面,可发消息,可选择接受到的消息的语言,可选择本地文件发送,可位置共享#jms+activemq实现点对点聊天和群聊示例代码:#微信界面示例代码:#qq界面示例代码:

    Unico-New:评估所需的 Unico 项目

    Unico-New 评估所需的 Unico 项目 ...使用以下名称在应用程序服务器上创建 2 个消息队列 jboss/exported/jms/queue/gcd jboss/exported/jms/topic/test ` 用法 在队列中使用 GET 方法推送 2 个数字 网址 ...

    facshop:“快速和智能在线商店”-使用Java EE 7实现电子商务应用程序(在线商店)

    快速智能的网上商店 “ Fast and Clever e-Shop”... Java消息服务(JMS)。 主要项目/ Web应用程序: “快速而智能的在线商店”(facshop-store)是实现综合大楼主要功能的主要Web应用程序。 具有两个图形界面:主界

    java综合试题

    4. JMS:Java 消息服务,用于实现异步消息传递。 5. RMI:远程方法调用,用于实现远程方法的调用。 6. JAXB:Java Architecture for XML Binding,用于将 Java 对象与 XML 文档进行绑定。 7. SSO:单点登录,用于...

    h_JAVA 2应用编程150例.rar

    实例119 Request-Reply模式的JMS应用 421 实例120 使用Java IDL 426 实例121 EJB与CORBA的交互 430 实例122 基于EJB的真实世界模型 433 实例123 EJB的商业应用——定购单 447 第11章 Java 2 Platform Micro Edition...

    J2EE中文版指南 CHM格式 带全文检索

    用deploytool配置JMS客户端 127 配置资源引用 127 配置资源环境引用 128 设置JNDI名 128 第8章 EJB查询语言 129 一.术语 129 二.简单语法 130 三.查询例子 130 简单查找方法的查询 130 跨越实体Bean关系查找方法...

    java开源包1

    Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...

    java开源包11

    Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...

    java开源包2

    Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...

    java开源包3

    Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...

    java开源包6

    Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...

    java开源包5

    Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...

    java开源包10

    Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...

    java开源包4

    Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...

Global site tag (gtag.js) - Google Analytics