一個消息對象分為三部分:消息頭(Headers),屬性(Properties)和消息體(Payload)。對于StreamMessage和MapMessage,消息本身就有特定的結(jié)構(gòu),而對于TextMessage,ObjectMessage和BytesMessage是無結(jié)構(gòu)的。一個消息可以包含一些重要的數(shù)據(jù)或者僅僅是一個事件的通知。
表示一個消息的有效期。只有在這個有效期內(nèi),消息消費(fèi)者才可以消費(fèi)這個消息。默認(rèn)值為0,表示消息永不過期。可以通過下面的方式設(shè)置:
producer.setTimeToLive(3600000); //有效期1小時 (1000毫秒 * 60秒 * 60分)
JMSPriority
消息的優(yōu)先級。0-4為正常的優(yōu)先級,5-9為高優(yōu)先級。可以通過下面方式設(shè)置:
producer.setPriority(9);
JMSMessageID
一個字符串用來唯一標(biāo)示一個消息。
JMSReplyTo
有時消息生產(chǎn)者希望消費(fèi)者回復(fù)一個消息,JMSReplyTo為一個Destination,表示需要回復(fù)的目的地。當(dāng)然消費(fèi)者可以不理會它。
JMSCorrelationID
通常用來關(guān)聯(lián)多個Message。例如需要回復(fù)一個消息,可以把JMSCorrelationID設(shè)置為所收到的消息的JMSMessageID。
JMSType
表示消息體的結(jié)構(gòu),和JMS提供者有關(guān)。
JMSRedelivered
如果這個值為true,表示消息是被重新發(fā)送了。因?yàn)橛袝r消費(fèi)者沒有確認(rèn)他已經(jīng)收到消息或者JMS提供者不確定消費(fèi)者是否已經(jīng)收到。
除了Header,消息發(fā)送者可以添加一些屬性(Properties)。這些屬性可以是應(yīng)用自定義的屬性,JMS定義的屬性和JMS提供者定義的屬性。我們通常只適用自定義的屬性。
后面會講到這些Header和屬性的用法。
消息的Headers部分通常包含一些消息的描述信息,它們都是標(biāo)準(zhǔn)的描述信息。包含下面一些值:
JMSDestination
消息的目的地,Topic或者是Queue。
JMSDeliveryMode
消息的發(fā)送模式:persistent或nonpersistent。前者表示消息在被消費(fèi)之前,如果JMS提供者DOWN了,重新啟動后消息仍然存在。后者在這種情況下表示消息會被丟失。可以通過下面的方式設(shè)置:
Producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
JMSTimestamp
當(dāng)調(diào)用send()方法的時候,JMSTimestamp會被自動設(shè)置為當(dāng)前事件。可以通過下面方式得到這個值:
long timestamp = message.getJMSTimestamp();
表示一個消息的有效期。只有在這個有效期內(nèi),消息消費(fèi)者才可以消費(fèi)這個消息。默認(rèn)值為0,表示消息永不過期。可以通過下面的方式設(shè)置:
producer.setTimeToLive(3600000); //有效期1小時 (1000毫秒 * 60秒 * 60分)
JMSPriority
消息的優(yōu)先級。0-4為正常的優(yōu)先級,5-9為高優(yōu)先級。可以通過下面方式設(shè)置:
producer.setPriority(9);
JMSMessageID
一個字符串用來唯一標(biāo)示一個消息。
JMSReplyTo
有時消息生產(chǎn)者希望消費(fèi)者回復(fù)一個消息,JMSReplyTo為一個Destination,表示需要回復(fù)的目的地。當(dāng)然消費(fèi)者可以不理會它。
JMSCorrelationID
通常用來關(guān)聯(lián)多個Message。例如需要回復(fù)一個消息,可以把JMSCorrelationID設(shè)置為所收到的消息的JMSMessageID。
JMSType
表示消息體的結(jié)構(gòu),和JMS提供者有關(guān)。
JMSRedelivered
如果這個值為true,表示消息是被重新發(fā)送了。因?yàn)橛袝r消費(fèi)者沒有確認(rèn)他已經(jīng)收到消息或者JMS提供者不確定消費(fèi)者是否已經(jīng)收到。
除了Header,消息發(fā)送者可以添加一些屬性(Properties)。這些屬性可以是應(yīng)用自定義的屬性,JMS定義的屬性和JMS提供者定義的屬性。我們通常只適用自定義的屬性。
后面會講到這些Header和屬性的用法。