1. 程式人生 > >JMS基本概念

JMS基本概念

次數 corba 開始 consumer 支持 客戶端 基本概念 種類 點對點

JMS是什麽

JMS java message service, java消息服務,是java EE中的一個技術。

JMS定義了java中訪問消息中間件的接口,並沒有給予實現,實現了JMS接口的消息中間件叫做JMS Provider,比如ActiveMQ。

JMS provider:實現了JMS接口和規範的消息中間件。

JMS message:JMS的消息,JMS消息由一下三部分組成:

1、消息頭:每個消息頭字段都有相應的getter和setter方法

2、消息屬性:如果需要除消息頭字段意外的值,那麽可以使用消息屬性

3、消息體:封裝具體的消息數據

JMS producer:消息生產者,創建和發送JMS消息的客戶端應用。

JMS consumer:消息消費者,接收和處理JMS消息的客戶端應用

消息的消費可以采用以下兩種方法之一:

1、同步消費:通過調用消費者的receive方法從目的地中顯示提取消息,receive方法可以一直阻塞到消息到達。

2、異步消費:客戶可以為消費者註冊一個監聽器,以定義在消息到達時的行動

JMS domains:消息傳遞域,JMS規範中定義了兩種消息傳遞域,點對點(ptp),發布訂閱(pub/sub)

1、點對點:

(1)每個消息只能有一個消費者

(2)消息的生產者和消費者之間沒有時間上的相關性。無論消費者在生產者發送消息的時候是否在線,它都可以提取消息。

技術分享

2、發布訂閱

(1)每個消息有多個消費者

(2)生產者和消費者之間有時間上的相關性。訂閱一個主題的消費者只能消費自它訂閱之後發布的消息。JMS規範允許客戶創建持久訂閱。這在一定程度上放松了時間上的相關性要求。持久訂閱允許消費者消費它在未處於激活狀態時發送的消息。

技術分享

3、在點對點消息傳遞域中,目的地被稱為隊列,在發布訂閱中被稱為主題。

ConnectionFactory:連接工廠,用來創建連接對象,以連接到JMS的provider

JMS Connection:封裝了科幻與JMS提供者之間的一個虛擬的連接

JMS Session:是生產和消費消息的一個單線程上下文,會話用於創建消息生產者、消息消費者和消息等。會話提供了一個事務性的上下文,在這個上下文文中,一組發送和接受被組合到了一個原子操作中。

Destination:消息發送到的目的地

Acknowledge:簽收

Transaction: 事物

JMS client:用來收發消息的java應用

Non-JMS client:使用JMS provider本地API寫的應用,用來替換JMS API實現收發消息的功能,通常會提供其他的一些特性,比如:corba,RMI等

Administered objects: 預定義的JMS對象,通常在provider規範中有定義,提供給JMS客戶端來訪問,比如:ConnectionFactory和Destination

JMS的消息結構:

JMS消息由一下幾部分組成:消息頭,屬性和消息體

消息頭包含消息的識別信息和路由信息,消息頭包含一些標準的屬性如下:

1、JMSDestination:由Send方法設置

2、JMSDeliveryMode:由send方法設置

3、JMSExpiration:由send方法設置

4、JMSPriority:由send方法設置

5、JMSMessageID:由send方法設置

6、JMSTimestamp: 由客戶端設置

7、JMSCorrelationID:由客戶端設置

8、JMSRelyTo:由科幻端設置

9、JMSType:由客戶端設置

10、JMSRedelivered: 由JMS Provider設置

標準的JMS消息頭包含以下屬性:

1、JMSDefinition: 消息發送的目的地,主要指Queue和Topic,自動分配

2、JMSDleiverMode:傳送模式。持久化和非持久化

3、JMSExpiration:消息過期時間

4、JMSPriority:消息優先級,從0-9十個級別,0-4是普通消息,5-9是加急消息。JMS不要求JMS Provider嚴格按照這是個優先級發送消息,但必須保證加急消息要先於普通消息到達。默認是1級,自動分配。

5、JMSMessageID: 唯一識別每個消息的標識,由JMS Provider產生。自動分配

6、JMSTimestamp:一個JMS Provider在調用send()方法時自動設置的。它是消息被發送和消費者世紀接收的時間差。自動分配。

7、JMSCorrelationID:用來連接到另外一個消息,典型的應用是在回復消息中連接到原消息。在大多數情況下,JMSCorrelationID用於將一條消息標記為對JMSMessageID標示的上一條消息的應答,不過,JMSCorrelationID可以是任何值,不僅僅是JMSMessageID。由開發者設置

8、JMSReplyTo:提供本消息回復消息的目的地地址。由開發者設置

9、JMSType: 消息類型的識別符,由開發者設置

10、JMSRedelivered: 如果一個客戶端收到一個設置了JMSRedelivered屬性的消息,則表示可能客戶端曾經在早些時候收到過該消息,但並沒有簽收(acknowledge)。如果該消息被重新傳送,JMSRedelivered=true反之,JMSRedelivered=false。自動設置

JMS的消息體,JMS API定義了五種消息體格式,TextMessage,MapMessage,BytesMessage,StreamMessage和ObjectMessage

消息屬性,包含以下三種類型的屬性,比如:

1、應用程序設置和添加的屬性,比如:

Message.setStringProperty("username",username);

2、JMS定義的屬性

使用“”JMSX“作為屬性名的前綴,connection.getMetaData().getJMSXPropertyNames(),方法返回所有連接支持的JMSX屬性的名字。

3、JMS供應商特定的屬性

JMS定義的屬性如下:

1、JMSXUserID:發送消息的用戶標識,發送時提供商設置

2、JMSXAppID:發送消息的應用標識,發送時提供商設置。

3、JMSDeliveryCount: 轉發消息重試次數,第一次是1,第二次是2,。。。,發送時提供商設置

4、JMSXGroupID:消息所在消息組的標識,由客戶端設置

5、JMSXGroupSeq:組內消息的序號第一個消息是1,第二個是2,。。。,由客戶端設置

6、JMSXProducerTXID:產生消息的事物的事物標識,發送時提供商設置

7、JMSXConsumerTXID:消費消息的事物標識,接收時提供商設置。

8、JMSSXRcvTimestamp:JMS轉發消息到消費者的時間,接收時提供商設置

9、JMSXState:假定存在一個消息倉庫,它存儲了每個消息的單獨拷貝,且這些消息從原始消息被發送時開始。每個拷貝的狀態有:1(等待),2(準備),3(到期)或4(保留)。由於狀態與生產者和消費只無關,所以它不是由他們來提供。它只和在倉庫中查找消息相關,因此JMS沒有提供這種API。由提供商設置

JMS基本概念