JMS学习(三)JMS 消息结构之属性及消息体详解

一、前言

通过上一篇的学习我们知道了消息分为三个部分,即消息头,属性及消息体,并对消息头的十个属性进行了详细的介绍,本文再对消息属性及消息体进行详细的介绍。

二、属性介绍

消息属性的主要作用是可以对头信息进行一个额外的补充,毕竟消息头信息一是有限,二是很多不能由应用程序设定。通常,消息属性可以用在消息选择器的表达式里,结合起来实现对消息的过滤。

消息属性的值只能是基本的类型,或者这些基本类型对应的包装类型。也就是说,不能将一个自定义的对象作为属性值。通常情况下,如果能够放在body里的内容,就不必放在消息属性里。

消息属性按类型可以分为标准属性(JMSX作为前缀),消息组件自定义的属性(JMS_作为前缀),以及应用自定义的属性。自定义的属性不要以前面两种为前缀。

  标准的JMSX属性如下表:

  

  其中,JMSXGroupID和JMSGroupSeq是客户端可以设置的。消息的属性一旦设置,且消息发送后,就会变成只读的,将不能再被修改。

  跟头信息的设置不同的是,对于这些标准属性,JMS并不要求消息中间件必须设置这些属性,所以这些属性的值可能是存在的,也可能为空,而且经测试大部分的标准属性都可以由应用程序自行设置,就像自定义的属性一样。

三、消息体

  为了适应不同场景下的消息,提高消息存储的灵活性,JMS定义了几种具体类型的消息,不同的子类型的消息体也不一样,需要注意的是,Message接口并没有提供一个统一的getBody之类的方法。消息子接口定义如下:

  1)TextMessage: 最简单的消息接口,用于发送文本类的消息,设置/获取其body的方法定义如下setText()/getText().

  2)StreamMessage: 流式消息接口,里面定义了一系列的对基本类型的set/get方法,消息发送者可以通过这些方法写入基本类型的数据,消息接收者需要按发送者的写入顺序来读取相应的数据。

  3)MapMessage:把消息内容存储在Map里,本接口定义了一系列对基本类型的的set/get方法,与StreamMessage不同的是,每个值都对应了一个相应的key,所以消息接收者不必按顺序去读取数据。

  4)ObjectMessage: 将对象作为消息的接口,提供了一个set/get 对象的方法,需要注意的是只能设置一个对象,这个对象可以是一个Collection,但必须是序列化的。

  5)BytesMessage:以字节的形式来传递消息的接口,除了提供了对基本类型的set/get,还提供了按字节方式进行set/get。

三、小结

  消息属性是对消息头信息的一种补充,相对来说更加灵活,通常情况下,我们不应该依赖标准的属性值,如果应用需要,我们也应该自定义所需要的属性值。

JMS提供的5种子消息接口让我们在发送消息时有了更多的选择,可以根据应用的实际需要来选择对应的子接口。

时间: 2024-10-13 10:24:47

JMS学习(三)JMS 消息结构之属性及消息体详解的相关文章

Android的学习之路(三)项目的启动过程和安装过程详解

应用的安装和启动过程: 安装:第一步:java的编译器会把这个.java文件编译成.class文件 第二部:Android的SDK提供了一个dx工具,这个工具把.class文件转义成.dex文件 第三部:打包操作,把.dex文件和资源文件进行打包,打包成一个压缩文件,然后进行签名.最后就打包成为了.apk文件 第四部:调用adb指令:adb install c:/x.apk安装到模拟器 具体过程:.JAVA---->.class--.dx-->.dex--->打包签名--->.ap

NetBios 的结构体详解(网络控制块NCB)

对之前网络基础编程用到控制块NCB进行介绍(补充): 在Win32环境下,使用VC++6.0进行NetBIOS程序开发时, 需要用到nb30.h文件和netapi32.lib静态链接库.前者定义了NetBIOS的所有函数声明和常数定义,后者定义了NetBIOS应用. Ncb的结构在nb30.h文件中定义.Ncb结构的定义:Ncb有64个字符,分为14个域(或称为字段)和一个10字节的保留域,表2.1显示了Ncb和它的域. 域名及字节偏移量说明. 各个命令详细说明: 1. 命令 NetBIOS命令

NetBios 的结构体详解

[NetBios 的结构体详解] 1.结构体. 2.命令 NetBIOS命令的使用方式有两种,即等待和非等待(或称为同步与异步)方式. 如果命令码的高阶位是0时是等待方式,命令将阻止提交命令的应用程序继续执行,直到该NetBIOS命令执行完毕后才允许这个应用程序继续执行.NetBIOS每次只能处理一个等待方式命令. 如果命令码的高阶位是二进制1时则是非等待方式,命令由NetBIOS在内部排队,并不阻止提交命令的应用程序继续执行.应用程序可通过对命令结束标志字段值的轮询来了解命令执行的状态(详见命

position属性absolute与relative 详解

position属性absolute与relative 详解 转自:http://www.cnblogs.com/jenry/archive/2007/07/15/818660.html 最近一直在研究javascript脚本,熟悉DOM中CSS样式的各种定位属性,以前对这个属性不太了解,从网上找到两篇文章感觉讲得很透彻,收藏下来,唯恐忘记. 一.解读absolute与relative  http://www.blueidea.com/tech/web/2006/4249.asp 很多朋友问过我

TortoiseGit学习系列之TortoiseGit基本操作拉取项目(图文详解)

前面博客 TortoiseGit学习系列之TortoiseGit基本操作修改提交项目(图文详解) TortoiseGit学习系列之TortoiseGit基本操作将提交到本地的项目推送到在线仓库(图文详解) TortoiseGit基本操作拉取项目 如果本地的项目没有在线仓库的新,则需要执行拉取操作(Pull ...). 在本地项目的空白处点击鼠标右键, 选择 TortoiseGit --> 拉取... 或: Pull.... 弹出拉取(pull)对话框: [如果拉取有BUG,请不要使用 rebas

第三课 第四讲03_04_Linux用户及权限详解

第三课 第四讲03_04_Linux用户及权限详解1.库和进程是同级的.进程可以获取CPU时间,内存地址,调用各种文件2.权限:定义了计算机资源和服务的访问能力叫权限3.逻辑容器,用户 关联权限就是用户组.用于指派权限,不能独立登陆 4.文件属主,文件属组,其他,5.用户和组在计算机里面就是个标识符6.进程也有属主和属组进程的安全上下文(secure context),进程属主和资源属主7.文件r,w,xr:read可读,可用使用文件查看命令cat等命令查看文件内容w:write可写.可用使用文

【JAVAEE学习笔记】hibernate01:简介、搭建、配置文件详解、API详解和CRM练习:保存客户

今日学习:hibernate是什么 一.hibernate是什么 框架是什么: 1.框架是用来提高开发效率的 2.封装了好了一些功能.我们需要使用这些功能时,调用即可.不需要再手动实现. 3.所以框架可以理解成是一个半成品的项目.只要懂得如何驾驭这些功能即可. hibernate框架是什么: hibernate的好处: 操作数据库的时候,可以以面向对象的方式来完成.不需要书写SQL语句 hibernate是一款orm框架: orm:object relationg mapping. 对象关系映射

轻松学习JavaScript二十九:JavaScript中的this详解

这几天在看很多的JS的代码,多次出现this关键字,有时候表示不理解,就仔细看了这一方面的知识. 在JavaScript语言中,this的定义是:this是包含它的函数作为方法被调用时所属的对象.说明:这句话有点咬 嘴,但一个多余的字也没有,定义非常准确,我们可以分3部分来理解它:1包含它的函数.2作为方法被调用时.3所 属的对象.随着函数使用场合的不同,this的值会发生变化.但是有一个总的原则,那就是this指的是,调用函数的那 个对象. this是Javascript语言的一个关键字,它代

FineBI学习系列之FineBI与HBase数据连接(图文详解)

不多说,直接上干货! 这是来自FineBI官网提供的帮助文档 http://help.finebi.com/http://help.finebi.com/doc-view-584.html 目录: 1.描述 2.操作 3.注意事项 1.描述 Hbase作为大数据平台的重要组成部分,在数据存储方面起到了至关重要的作用,因此BI连接Hbase也是必不可少的功能之一.FineBI提供的方法是通过phoenix连接hbase,下面我们将详细介绍如何进行连接. 2.操作 2.1 配置信息   驱动 URL