JMS消息

原创 2012年03月31日 15:11:52

消息是整个JMS规范最为重要的部分。一个JMS应用程序中的所有数据和事件都是使用消息进行通信的,同时JMS的其余部分也在消息传输服务。

一个 Message 对象有3个部分:消息头,消息属性和消息数据本身,也称有效负载或消息体。

    消息头:每条消息都有一组标准的消息头。每个消息头都由一组取值函数和赋值函数方法所标识。消息头分为两大类:自动分配消息头和开发者分配消息头。

自动分配消息头:大多数消息头都是自动分配的,在传送消息时,消息头的值由JMS提供者来设置,因此开发者使用  setJMS<HEADER>() 方法就会被忽略。不过一些消息头可以再创建 Session 和 MessageProvider 时,有开发者通过编程方式来设置。以下是自动分配消息头:

JMSDestination: 该消息头是使用一个Topic 或 Queue 对象来标识目的地。

JMSDeliveryMode: 传送模式。在JMS中消息有两种传输模式:持久模式和非持久模式。一条持久消息应该被传送“一次且仅一次”,一条非持久消息最多被传送一次。

JMSMssageID: 消息的唯一标识(其实现取决于具体厂商),是个String类型的值。

JMSTimestamp: JMS提供者接受消息的时间,而不是该消息实际传送的时间,long 型。

JMSExpiration: 消息对象的有效期,毫秒为单位。

JMSRedelivered: 如果消息被重传则为 true,否则为 false。

JMSPriority: 消息的优先级,共两类:0-4普通优先级,4-9加急优先级。

开发者消息头:必须由消息生产者在传送消息前显式设置:

JMSReplyto: 在某些情况下,一个JMS消息生产者可能会要求消费者对一条消息做出应答。JMSReplyto 消息头包含了一个 javax.jms.Destination,标明了JMS消费者应该应答的地址。

JMSCorrelationID: 用于将当前消息和先前某些消息或应用程序特定的ID关联起来。大多数情况下,用于将一条消息标记为对 JMSMessageID 标识的一条消息的应答。

JMSType: 可选消息头。标识消息结构和有效负载。

    消息属性:像消息的附加消息头一样。允许开发者添加有关消息的不透明附加信息。它们还可以暴露消息选择器在消息过滤时使用的数据。消息的属性可以是String、boolean、byte、double、int、float 或 long类型。消息属性有3中基本类型:应用程序特定的属性、JMS定义的属性和提供者特定的属性。

应用程序特定的属性:由应用程序开发者定义的所有属性可以作为一个应用程序特定的属性。应用程序属性在消息传送之前进行设置。并不存在预先定义的应用程序属性,开发者可以自由定义能满足他们需要的任何属性。javax.jms.Message 接口为每种类型的属性值都提供了取值函数和赋值函数方法。

package javax.jms;

public interface Message {
// getter and setter
}

JMS定义的属性

JMSXUserID

JMSXAppID

JMSXProduceTXID

JMSXConsumerTXID

JMSXRcvTimestamp

JMSXDeliveryCount

JMSXState

JMSXGroupID

JMSXGroupSeq

提供者定义的属性:每个提供者(JMS的实现者)都可以定义一组私有属性,这些属性可以由客户端或提供者自动设置。必须以JMS为前缀。

    消息类型:JMS定义了6中JMS提供者必须支持的接口类型(以下就不做具体展开了,只列举以下):

Message

TextMessage

ObjectMessage

BytesMessage

StreamMessage

MapMessage


参考资料:

《Java消息服务》第二版, Mark Richards, Richard Monson-Haefel & David A. Chappell 著, 闫怀志 译。


【Java.JMS】JMS中的消息的基本结构

...
  • robinjwong
  • robinjwong
  • 2014年08月25日 16:05
  • 1116

JMS消息详解

Message有三个主要组成部件:标头、主体和属性一、消息标头:消息标头是消息的信封,包含为使消息到达目的地所需要的所有信息,可以直接控制其中一些字段的值,其它值则由JMS提供程序填写。 JMSDes...
  • buoymp
  • buoymp
  • 2006年06月09日 23:40
  • 7113

jms中消息接收的实现原理

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

JMS两种消息模型

前段时间学习EJB,接触到了JMS(Java消息服务),JMS支持两种消息模型:Point-to-Point(P2P)和Publish/Subscribe(Pub/Sub),即点对点和发布订阅模型。 ...
  • hanxuemin12345
  • hanxuemin12345
  • 2014年06月18日 16:17
  • 3744

jms 消息过滤 及消息的组成

一 JMS 消息由以下几部分组成:消息头,属性,消息体。[4]l        消息头(header):JMS消息头包含了许多字段,它们是消息发送后由JMS提供者或消息发送者产 生,用来表示消息...
  • jixiuffff
  • jixiuffff
  • 2010年08月01日 11:26
  • 3609

1.JMS消息确认机制

1.JMS消息确认机制 JMS消息只有在被确认之后,才认为已经被成功地消费了。消息的成功消费通常包含三个阶段:客户接收消息、客户处理消息和消息被确认。在事务性会话中,当一个事务被提交的时候,确认...
  • legend_x
  • legend_x
  • 2014年02月19日 15:10
  • 1029

JMS消息选择器

消息选择器:对于消息消费者而言,可能希望接收通道中特定规则的消息,这个时候就需要使用消息选择器. Java代码   MessageConsumer consumer = ses...
  • wangtaomtk
  • wangtaomtk
  • 2016年05月29日 12:10
  • 429

JMS消息传输机制

JMS消息传送模型:   消息传送机制, 是基于拉取(pull)或者轮询(polling)的方式.    JMS具备两种"消息传送模型": P2P和Pub/sub.  (1) ...
  • lipc_
  • lipc_
  • 2016年10月04日 13:45
  • 901

理解JMS规范中消息的传输模式和消息持久化

JMS规范定义了2种消息传输模式:持久传送模式和非持久传输模式。发送者可以通过如下类似的代码进行设置 TopicPublisher publihser = session.createPublishe...
  • aitangyong
  • aitangyong
  • 2014年05月18日 13:17
  • 3405

spring消息之使用jms发送和接收消息

自学这个地方,遇到了许多莫名其妙的错误,也是对自己搞了一整天的一个总结,免得后面又忘记。 (1)首先,发送消息的话应该有消息代理这里我们在spring中搭建消息代理使用ActiveMQ。 在htt...
  • arrogant_boom
  • arrogant_boom
  • 2016年11月29日 11:10
  • 999
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JMS消息
举报原因:
原因补充:

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