标签:des io ar 使用 java sp 数据 on amp
一个Message对象有3个部分:消息头,消息属性,最后就是消息数据自身,它称为有效负载或消息体。消息能够携带重要的数据或仅仅用于系统中的事件通知。在大多数情况下,消息同时作为通知和携带数据的工具。下面我们先来说说消息头。
每条JMS消息都有一组标准的消息头。每个消息头都由一组取值函数和赋值函数方法所标识,这些方法名称紧跟在术setJMS<HEADER>(),getJMS<HEADER>()之后。下面是一个Message接口的部分定义,它显示了JMS消息头使用的所有方法:
public interface Message { public Destination getJMSDestination() throws JMSException; public void setJMSDestination(Destination destination) throws JMSException; public int getJMSDeliveryMode() throws JMSException public void setJMSDeliveryMode(int deliveryMode) throws JMSException; public String getJMSMessageID() throws JMSException; public void setJMSMessageID(String id) throws JMSException; public long getJMSTimestamp() throws JMSException‘ public void setJMSTimestamp(long timestamp) throws JMSException; public long getJMSExpiration() throws JMSException; public void setJMSExpiration(long expiration) throws JMSException; public boolean getJMSRedelivered() throws JMSException; public void setJMSRedelivered(boolean redelivered) throws JMSException; public int getJMSPriority() throws JMSException; public void setJMSPriority(int priority) throws JMSException; public Destination getJMSReplyTo() throws JMSException; public void setJMSReplyTo(Destination replyTo) throws JMSException; public String getJMScorrelationID() throws JMSException; public void setJMSCorrelationID(String correlationID) throws JMSException; public byte[] getJMSCorrelationIDAsBytes() throws JMSException; public void setJMSCorrelationIDAsBytes(byte[] correlationID) throws JMSException; public String getJMSType() throws JMSException; public void setJMSType(String type) throws JMSException; }
JMS消息头可以分为两大类:自动分配的消息头和开发者分配的消息头。
1. 自动分配的消息头
大多数JMS消息头是自动分配的,在传送消息时,消息头的值由JMS提供者来设置,因此开发者使用setJMS<HEADER>()方法分配的值就被忽略了。换句话说,对于大多数自动分配的消息头来说,使用赋值函数方法显然是徒劳的。不过,这并非意味着开发者无法控制这些消息头的值。一些自动分配的消息头可以在创建Session和MessageProducer(也就是TopicPublisher)时,由开发者通过编程方式来设置。这样的例子有JMSDeliveryMode和JMSPriority消息头,它们在随后的消息头定义中会有所解释。
JMSDeliveryMode
在JMS中,传送模式有两种类型:持久性模式和非持久性模式。一条持久性消息应该被传送“一次而且仅仅一次”,这就意味着如果JMS提供者出现故障,该消息并不会丢失; 它会在服务器恢复正常之后再次传送。一条非持久性消息最多只会传送一次,这意味着如果JMS提供者出现故障,该消息可能会永久丢失。在持久性和非持久性这两种传送模式中,消息服务器都不会将一条消息向同一消息者发送一次以上。
int deliverymode = message.getJMSDeliveryMode(); if(deliverymode = javax.jms.DeliveryMode.PERSISTENT) { //持久化 ...... }else { //DeliveryMode.NON_PERSISTENT 非持久化 ...... }
传送模式可以使用生产者(也就是 TopicPublisher 或 QueueSender)上的setJMSDeliveryMode()方法来设定。一旦为MessageProducer设置了传送模式,它就会应用到使用该生产者传送的所有消息上。默认设置为PERSISTENT(持久性):
//在消息生产者上设置JMS传送模式 TopicPublisher topicPublisher = topicSession.createPublisher(topic); topicPubiisher.setDeliveryMode(DeliverMode.NON_PERSISTENT);
标签:des io ar 使用 java sp 数据 on amp
原文地址:http://my.oschina.net/fhd/blog/337394