-------------------------------------------------------------------------------------------服務器
JMS是什麼
JMS 全稱:Java Message Service,Java消息服務,是Java EE中的一個技術。dom
JMS規範ide
JMS定義了Java 中訪問消息中間件的接口,並無給予實現,實現JMS接口的消息中間件成爲JMS Provider,例如:Active MQspa
JMS Provider線程
實現JMS接口和規範的消息中間件3d
JMS message中間件
JMS的消息,JMS消息由三部分組成:消息頭、消息屬性、消息體對象
消息頭包含消息的識別消息和路由消息,消息頭包含一些標準的屬性以下:blog
(1)JMSDestination: 消息發送的目的地,主要是指Queue和Topic,由send方法設置.接口
(2)JMSDeliveryMode:傳送模式。有兩種:持久模式和非持久模式。一條持久性的消息應該被傳輸"一次僅僅一次",這就意味着若是JMS提供者出現故障,該消息並不會丟失,它會在服務器恢復以後再次傳遞。一條非持久的消息最多會傳遞一次,這意味着服務器出現故障,該消息將永遠丟失。由send方法設置
(3)JMSExpiration:消息過時時間,等於Destination的send方法中的timeToLive值加上發送時刻的GMT的時間值。若是timeToLive值等於零,則JMSExpiration被設置爲零,表示該消息永不過時。若是發送後,在消息過時時間以後消息尚未被髮送到目的地,則該消息被清除。由send方法設置
(4)JMSPriority:消息優先級,從0-9十個級別,0-4是普通消息,5-9是加急消息。JMS不要求JMS Provider嚴格按照這十個優先級發送消息,但必須保證加急消息要先於普通消息到達,默認是4級。由send方法設置
(5)JMSMessageID:惟一識別每一個消息的標識,由JMS Provider產生。由send方法設置
(6)JMSTimestamp:一個JMS Provider在調用send()方法時自動設置,它是消息被髮送和消費者實際接收的時間差。由客戶端設置
(7)JMSCorrelationID:用來鏈接到另一個消息,典型的應用是在回覆消息中鏈接到原消息。在大多數狀況下,JMSCorrelationID用於將一條消息標記爲對JMSMessageID標示的上一條消息的應答,不過,JMSCorrelationID能夠是任何值,不單單是JMSMessageID。由客戶端設置
(8)JMSType: 消息類型的標識符,由客戶端設置
(9)JMSReplyTo: 提供本消息回覆消息的目的地址,由客戶端設置
(10)JMSRedelivered:若是一個客戶端收到一個設置了JMSRedelivered屬性的消息,則表示可能客戶端曾經在早些時候收到過該消息,但並無簽收(acknowledged)。若是該消息被從新傳送,JMSRedelivered=true 不然 JMSRedelivered=flase 。由JMS Provider設置
消息體,JMS API定義了5種消息體格式,也叫消息類型,可使用不一樣形式發送接收數據,並能夠兼容現有的消息格式。
包括:TextMessage、MapMessage、BytesMessage、StreamMessage、ObjectMessage
消息屬性,包含如下三種類型的屬性:
1.應用程序設置和添加的數據,好比:message.setStringProperty("userName",userName);
2.JMS定義的屬性,使用"JMSX"做爲屬性名的前綴, connection.getMetaData().getJMSXPropertyNames() 方法返回全部鏈接支持的JMSX屬性的名字。
3.JMS供應商特定的屬性
JMS producer
消息生產者,建立和發送JMS消息的客戶端應用
JMS consumer
消息消費者,建立和處理JMS消息的客戶端應用
JMS domains: 消息傳遞域
JMS規範中定義了兩種消息傳遞域: 點對點(point-to-point,簡寫成PTP);消息傳遞域和發佈/訂閱消息傳遞域(publish/subscribe,簡寫成pub/sub)
1.點對點消息傳遞域的特色以下:
a.每一個消息只能有一個消費者
b.消息的生產者和消費者之間沒有時間上的相關性。不管消費者在生產者發送消息的時候是否處於運行狀態,它均可以提取消息。
2.發佈/訂閱消息傳遞域的特色以下:
a.每一個消息能夠有多個消費者
b.生產者和消費者之間有時間上的相關性。訂閱一個主題的消費者只能消費自它訂閱以後發佈的消息。JMS規範容許客戶建立持久訂閱,這在必定程度上放鬆了時間上的相關性要求。持久訂閱容許消費者消費它在未處於激活狀態時發送的消息。
3.在點對點消息傳遞域中,目的地被稱爲隊列(queue);在發佈/訂閱消息傳遞域中,目的地被稱爲主題(topic)
Connection factory: 鏈接工廠,用來建立鏈接對象,以鏈接到JMS的provider
JMS Connection: 封裝了客戶與JMS提供者之間的一個虛擬的鏈接
JMS Session: 是生產和消費消息的一個單線程上下文
會話用於建立消息生產者(producer)、消息消費者(consumer)和消息(message)等。會話提供了一個事務性的上下文,在這個上下文中,一組發送和接收被組合到了一個原子操做中。
Destination:消息發送到的目的地
Acknowledge:簽收
Transaction:事務
JMS client: 用來收發消息的Java應用