Java消息服务~自动分配的消息头
消息頭的值由JMS提供者來設置,開發者setJMSXxx()分配的值忽略。
JMSDestination
? ? ? ? 消息頭使用一個Topic 或 Queue 對象來標識目的地。
Topic destination = (Topic) message.getJMSDestination();JMSDeliveryMode
? ? ? ? 在JMS 中,傳送模式有兩種類型:持久模式和非持久模式。
????????一條持久性消息應該被傳送“一次而且僅僅一次”,這就意味著如果JMS 提供者出現故障,該消息并不會丟失,它會在服務器恢復正常之后再次傳送。
? ? ? ? 一條非持久性消息最多只會傳送一次,這意味著如果JMS 提供者出現故障,該消息可能會永久丟失。
? ? ? ? 在持久性和非持久性這兩種傳遞模式總,消息服務器都不會將一條消息向同一消費者發送一次以上。
int deliveryMode = message.getJMSDeliveryMode(); if (deliveryMode == DeliveryMode.PERSISTENT) {... } else {... }傳送模式可以使用生產者(TopicPublisher 或 QueueSender)的 setJMSDeliveryMode() 方法來設定。默認為PERSISTENT
// 在消息生產者上設置JMS 傳送模式 TopicPublisher topicPublisher = topicSession.createPublisher(topic); topicPublisher.setDeliveryMode(DeliveryMode.NON_PERSISTENT);JMSMessageID
????????JMSMessageID 是一個String 類型的值,它唯一地標識了一條消息。至于標識符是如何實現唯一的,這取決于廠商。
String messageId = message.getJMSMessageID();JMSTimestamp
????????JMSTimestamp 由 MessageProducer 在調用send() 操作時自動設置。它包含的是JMS 提供者接收消息的時間,而不是該消息實際傳送的時間。
long timestamp = message.getJMSTimestamp();JMSExpiration
? ? ? ? 一個Mesage 對象的有效期(expiration date)用來防止把過期的消息傳送給消費者。
long timeToLive = message.getJMSExpiration();消息的有效期以毫秒為單位,使用setTimeToLive() 方法在生產者(TopicPublisher)上設置:
TopicPublisher topicPublisher = topicSession.createPublisher(topic); // 將生存時間設置為1 小時(1000毫秒 * 60 * 60) topicPublisher.setTimeToLive(3600000);默認將timeToLive 設置為零(0),這表明該消息沒有到期時間。
JMSRedelivered
????????JMSRedelivered 消息頭表示該消息將被重新傳送給消費者。如果消息被重新傳送,JMSRedelivered 消息頭就為 true,否則為 false。
boolean isRedelivered = message.getJMSRedelivered();JMSPriority
? ? ? ? 消息優先級有兩類:0~4級是普通優先級,而5~9級則是加急優先級。加急優先級的消息要比普通優先級的消息優先傳送:
int priority = message.getJMSPriority();...TopicPublisher topicPublisher = topicSession.createPublisher(topic); topicPublisher.setPriority(9);總結
以上是生活随笔為你收集整理的Java消息服务~自动分配的消息头的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Struts2源码阅读(二)_Actio
- 下一篇: php跳一跳小游戏,原生JS实现的跳一跳