`
liyixing1
  • 浏览: 961515 次
  • 性别: Icon_minigender_1
  • 来自: 江西上饶
社区版块
存档分类
最新评论

jms-message对象

    博客分类:
  • jms
阅读更多
message必须通过session创建,以便完成对应的初始化,而不是通过new创建,new创建出来的对象,确实很多信息。

Message
消息由三部分组成


头,属性和内容。


所有获取头内容的方法都一getJMSXxx命名。


大致定义如下

public interface Message {

    static final int DEFAULT_DELIVERY_MODE = DeliveryMode.PERSISTENT;

    static final int DEFAULT_PRIORITY = 4;

    static final long DEFAULT_TIME_TO_LIVE = 0;

    String getJMSMessageID() throws JMSException;

    void setJMSMessageID(String id) throws JMSException;

    long getJMSTimestamp() throws JMSException;

    void setJMSTimestamp(long timestamp) throws JMSException;

    byte[] getJMSCorrelationIDAsBytes() throws JMSException;

    void setJMSCorrelationIDAsBytes(byte[] correlationID) throws JMSException;

    void setJMSCorrelationID(String correlationID) throws JMSException;

    String getJMSCorrelationID() throws JMSException;

    Destination getJMSReplyTo() throws JMSException;

    void setJMSReplyTo(Destination replyTo) throws JMSException;

    Destination getJMSDestination() throws JMSException;

    void setJMSDestination(Destination destination) throws JMSException;

    int getJMSDeliveryMode() throws JMSException;

    void setJMSDeliveryMode(int deliveryMode) throws JMSException;

    boolean getJMSRedelivered() throws JMSException;

    void setJMSRedelivered(boolean redelivered) throws JMSException;

    String getJMSType() throws JMSException;

    void setJMSType(String type) throws JMSException;

    long getJMSExpiration() throws JMSException;

    void setJMSExpiration(long expiration) throws JMSException;

    int getJMSPriority() throws JMSException;

    void setJMSPriority(int priority) throws JMSException;

    void clearProperties() throws JMSException;

    boolean propertyExists(String name) throws JMSException;

    boolean getBooleanProperty(String name) throws JMSException;

    byte getByteProperty(String name) throws JMSException;

    short getShortProperty(String name) throws JMSException;

    int getIntProperty(String name) throws JMSException;

    long getLongProperty(String name) throws JMSException;

    float getFloatProperty(String name) throws JMSException;

    double getDoubleProperty(String name) throws JMSException;

    String getStringProperty(String name) throws JMSException;

    Object getObjectProperty(String name) throws JMSException;

    Enumeration getPropertyNames() throws JMSException;

    void setBooleanProperty(String name, boolean value) throws JMSException;

    void setByteProperty(String name, byte value) throws JMSException;

    void setShortProperty(String name, short value) throws JMSException;

    void setIntProperty(String name, int value) throws JMSException;

    void setLongProperty(String name, long value) throws JMSException;

    void setFloatProperty(String name, float value) throws JMSException;

    void setDoubleProperty(String name, double value) throws JMSException;

    void setStringProperty(String name, String value) throws JMSException;

    void setObjectProperty(String name, Object value) throws JMSException;

    void acknowledge() throws JMSException;

    void clearBody() throws JMSException;
}


其中消息头分为两类,一类是自动分配的,一类是开发人员指定的,大多数是自动分配。
获取消息头一般通过Message对象就可以获取
设置消息头,自动类则大多是通过发送者设置。非自动类头则通过message对象设置。

JMSDestination
该头信息用来标示来源,是一个Topic或者Queue对象。

JMSDeliveryMode
信息交付模式,分为永久的和非永久的,永久的情况,jms收到消息,就持久化,防止丢失,而非永久的JMS中间件要是挂了,就呵呵吧。

int deliverymode = message.getJMSDeliveryMode();
if (deliverymode == javax.jms.DeliveryMode.PERSISTENT) {
...
} else { // equals DeliveryMode.NON_PERSISTENT
...
}

如上方式可以判断是否永久。
设置非永久性消息是发送者设置的。
TopicPublisher topicPublisher = topicSession.createPublisher(topic);
topicPublisher.setDeliveryMode(DeliveryMode.NON_PERSISTENT);

JMSMessageID
消息ID,唯一标示,在做历史库信息的时候很有用。
String messageid = message.getJMSMessageID();

JMSTimestamp
长整型,而不是时间形,用来确定中间件收到的时间(不是发送者发送的时间)。
long timestamp = message.getJMSTimestamp();

JMSExpiration
消息过期时间。
long timeToLive = message.getJMSExpiration();
,也是通过发送者设置过期时间
topicPublisher.setTimeToLive(3600000);。
0的时候,不会过期。

JMSRedelivered
是否重新发送boolean isRedelivered = message.getJMSRedelivered()

JMSPriority
设置优先级0-4是正常级别,5-9是高优先级别,
int priority = message.getJMSPriority();

TopicPublisher topicPublisher = TopicSession.createPublisher(someTopic);
topicPublisher.setPriority(9);

另外消息发送出去后,setPriority将会被忽略。

JMSReplyTo
一些情况下,需要再消费者收到消息后,进行回复
//消息生产者进行回复设置,需要定义一个Destination,来帮助消费者回复
message.setJMSReplyTo(topic);

//消息消费者
Topic topic = (Topic) message.getJMSReplyTo();//获取生产者的信息

JMSCorrelationID
对于需要回复的情况下,该值会与发送者的消息的MessageId相同,来表示对哪个消息回复。当然也不是必须相同

JMSType
程序员可以通过该字段,来定义数据类型等等。


属性
属性支持的类型有String, boolean, byte, double, int, long, or float.
分为三类,应用程序特定属性,JMS定义属性,中间件提供商属性。

应用程序特定属性
由开发人员设置,通过message设置
message.setStringProperty("username",username);更多的类型设置和JDBC很像。

另外setObjectProperty() and getObjectProperty()两个方法,只能设置原生类或者对应的封装类,以及String,其他的无法传递。消息发送后,无法修改,如果修改会抛出MessageNotWriteableException。当然可以通过调用clearProperties方法,来清除属性,清除后可以进行修改。

JMS定义的属性
• JMSXUserID
• JMSXAppID
• JMSXProducerTXID
• JMSXConsumerTXID
• JMSXRcvTimestamp
• JMSXDeliveryCount
• JMSXState
• JMSXGroupID
• JMSXGroupSeq

JMSXGroupID and JMSXGroupSeq
这两个属性,根据JMS标准,JMS中间件必须实现的,其他可选。

中间件供应商提供的属性
根据供应商自己决定。

消息
TextMessage, StreamMessage, MapMessage, ObjectMessage, and BytesMessage
这六种类型是必须实现的。

Message类型是基础接口,session提供createMessage();该方法返回一个只有头‘,属性,但内容是空的消息。

消息发送后,会变成只读,可以通过clearBody,使得重新可以写。

客户确认模式
TopicSession topic =
topicConnection.createTopicSession(false, Session.CLIENT_ACKNOWLEDGE);
当使用该模式,那么收到消息后,需要明确告诉JMS,消息被收到。message.acknowledge();
  • 大小: 11 KB
分享到:
评论

相关推荐

    jms-1.1.jar(jms工具jar包)

    Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用间异步通信的标准接口。它提供了一种可靠的消息传递机制,允许应用程序创建、发送、接收和读取消息。`jms-1.1.jar` 是一个包含了JMS 1.1...

    jms-1.1.jar

    Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用间异步通信的一种标准接口。JMS 1.1是其一个重要的版本,它为分布式系统中的应用程序提供了一种可靠的消息传递机制,使得应用程序可以在...

    javax.jms-1.1.jar

    4. **消息类型**:JMS定义了四种消息类型:`TextMessage`(文本消息)、`ObjectMessage`(序列化Java对象)、`BytesMessage`(字节流)和`MapMessage`(键值对形式的数据)。 5. **事务管理**:JMS支持两种事务模式...

    jms-1_1-fr-apidocs.zip

    Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用集成的一种标准API,它为应用程序提供了创建、发送、接收和读取消息的标准接口。"jms-1_1-fr-apidocs.zip"是一个包含JMS 1.1规范的API文档...

    spring-jms-4.3.4.RELEASE.zip

    首先,Spring JMS是Spring Framework中的一个模块,它提供了一种简洁、面向对象的方式来访问JMS API,简化了消息生产者和消费者的实现。在Spring的配置文件中,开发者可以轻松定义消息模板、监听容器和消息驱动的...

    jms-1_0_2-upd-sampleprograms.zip

    Java消息服务(Java Message Service,简称JMS)是Java平台中用于在分布式环境中传递消息的标准API,它为应用程序提供了一种可靠的消息传递机制。"jms-1_0_2-upd-sampleprograms.zip"是一个压缩包,其中包含了一系列...

    jms-1.1接口定义代码

    JMS(Java Message Service)是Java平台中用于企业级应用之间进行异步消息传递的一种标准API。在JMS 1.1版本中,它提供了一套接口和模型,使得开发人员能够创建、发送、接收和读取消息。JMS允许应用程序在不关心彼此...

    PHP 调用 JMS -Stomp

    - **Stomp协议**:了解其基本结构和命令,如SEND、SUBSCRIBE、MESSAGE、ACK等。 - **JMS概念**:理解主题和队列的区别,以及如何选择合适的消息模式。 - **PHP的Stomp库**:研究如何安装和使用`StompClient`或类似库...

    log4j依赖的包(jms-1.1.jar+jmxri-1.2.1.jar+jmxtools-1.2.1.jar)

    首先,我们来看JMS(Java Message Service)-1.1.jar。JMS是Java平台上的一个标准API,用于在分布式环境中发送和接收消息。Log4j可以利用JMS Appender将日志信息发送到消息队列,这样就可以实现日志的集中管理和分发...

    ActiveMQ 中javax.jms的源码 javax.jms-sources-1.1.zip

    Message接口有多种子接口,如TextMessage用于文本消息,ObjectMessage用于Java对象,BytesMessage用于二进制数据等。 2. **Destination**:目的地接口代表消息的发送和接收地点,分为Queue(队列)和Topic(主题)...

    JMS--J2EE培训材料

    JMS(Java Message Service)是Java平台中关于面向消息中间件(MOM)的标准API,它允许应用程序组件生成、发送、接收和读取消息。它旨在促进分布式系统中的组件之间松散耦合、可靠且高效的信息交流。本文档旨在详细...

    ApacheCamel-JMS-ActiveMQ

    JMS(Java Message Service)是Java平台中用于消息传递的标准API,它提供了在分布式环境中进行异步通信的能力。ActiveMQ 是一个流行的开源JMS提供者,它支持多种协议,如AMQP、STOMP和OpenWire等。 在"Apache Camel...

    Lab2-JMS-code_jms_brainhht_

    Java JMS(Java Message Service)是Java平台中用于在分布式环境中进行异步消息传递的标准API。JMS允许应用程序创建、发送、接收和读取消息,有效地支持企业级应用之间的通信。在这个“Lab2-JMS-code_jms_brainhht_...

    JMS-详解[收集].pdf

    - JNDI:JMS客户端通过JNDI(Java Naming and Directory Interface)查找并使用JMS对象,如ConnectionFactory和Destination。 2. JMS编程模型: - ConnectionFactory:这是用于创建Connection的工厂类,通常在jms...

    javax包下的javax.jms.jar及servlet-api.jar

    这里我们关注的是两个特定的JAR文件:`javax.jms.jar`和`servlet-api.jar`,它们分别与Java消息服务(Java Message Service,JMS)和Java Servlet API相关。 **Java消息服务(JMS)**是Java平台上的一个标准接口,...

    Laravel开发-jms-format-laravel .zip

    标题 "Laravel开发-jms-format-laravel .zip" 暗示了这是一个关于使用 Laravel 框架进行开发的项目,其中可能包含了JMS(Java Message Service)格式的相关实现。Laravel 是一个流行的PHP框架,它提供了优雅的方式来...

    jms-test.zip

    6. 发送和接收消息:使用Message对象封装数据,并通过生产者发送;消费者从目的地接收消息。 7. 关闭资源:完成操作后,记得关闭会话、连接和其他资源,以释放系统资源。 在“jms-test”项目中,可能包含了实现这两...

    JMS-ActiveMQ入门实例

    Java消息服务(Java Message Service,简称JMS)是Java平台中用于创建、发送、接收和阅读消息的应用程序接口。它为应用程序提供了标准的接口,可以跨越多种消息中间件产品进行通信。JMS允许在分布式环境中交换异步...

    jms-study.zip_jms_server jms

    Java消息服务(JMS,Java Message Service)是Java平台中用于企业级应用集成(EAI)的一种标准API,它提供了一种可靠的消息传递机制,使得应用程序可以在分布式环境中交换消息。JMS允许应用程序创建、发送、接收和...

Global site tag (gtag.js) - Google Analytics