1. 基本概念
- JMS:Java Message Service, Java消息服務,是Java EE中的一個技術。
- JMS規範:JMS定義了Java中訪問消息中間件的接口,並無給予實現,實現JMS的接口的消息中間件稱爲
JMS Provider
,例如ActiveMQ。
- JMS message:JMS消息,其由一下三部分組成:
- 消息頭:每一個消息頭字段都有相應的
getter
和setter
方法;
- 消息屬性:若是須要除消息頭字段之外的值,那麼可使用消息屬性;
- 消息體:封裝具體的消息數據。
- JMS producer:消息生產者,建立和發送JMS消息的客戶端應用。
- JMS consumer:消息消費者,接收和處理JMS消息的客戶端應用。
消息的消費者能夠採用如下兩種方法之一:
- 同步消費:經過調用
consumer
的receives
方法從destination
中顯示提取消息,receive
方法能夠一直阻塞到消息到達(或設定的等待超時時間);
- 異步消費:客戶端能夠爲
consumer
在JMS Provider
中註冊一個消息監聽器,以定義在消息到達時所採起的動做。
- JMS Browser:一個消息的觀察者,只看消息,不會對消息的狀態形成影響。
- JMS domains:消息傳遞域,JMS規範中定義了兩種消息傳遞域:點對點消息傳遞域(point-to-point,簡寫成PTP)和發佈/訂閱消息傳遞域(publish/subscribe,簡寫成pub/sub)。
- PTP消息傳遞域的特色以下:
- 每一個消息只能有一個
consumer
,但一個Queue
能夠有多個consumer
;
- 消息的生產者和消費者之間沒有時間上的相關性。也就是說不管消費者在生產者發送消息的時候是否處於運行狀態,它均可以提取消息;
- 在PTP消息傳遞域中,
Destination
被稱爲隊列(Queue)
。
- PUB/SUB消息傳遞域的特色以下:
- 每一個消息能夠有多個
consumer
;
Producer
和consumer
之間有時間上的相關性。Subscribe
一個Topic
的consumer
只能消費自它subscribe
以後發佈的消息。JMS規範容許客戶建立持久訂閱
,這在必定程度上放鬆了時間上的相關性要求。持久訂閱
容許consumer
消費它在未激活狀態時,由producer
發佈的消息;
- 在PUB/SUB消息傳遞域中,
Destination
被稱爲主題(Topic)
。
2. JMS開發概念
- Connection Factory:鏈接工廠,用來建立鏈接對象,以鏈接到JMS的provider;
- JMS Connection:封裝了客戶與JMS提供者之間的一個虛擬的鏈接;
- JMS Session:是生產和消費消息的一個單線程上下文;
會話用於建立消息生產者(producer)
、消息消費者(consumer)
、消息目的地(Destination)
和消息(message)
等。會話提供了一個事務性的上下文
,在這個上下文中,一組發送和接收被組合到了一個原子操做中;
- Destination:消息發送到的目的地;
- Acknowledge:簽收;
- Transaction:事務;
Session javax.jms.Connection.createSession(boolean transacted, int acknowledgeMode) throws JMSException
- JMS Client:用來收發消息的Java應用;
- Non-JMS Client:使用JMS provider本地API寫的應用,用來替換JMS API實現收發消息的功能,一般會提供其餘的一些特性,好比:CORBA、RMI等;
- Administered Objects:預約義的JMS對象,一般在provider規範中有定義,提供給JMS客戶端來訪問,好比: ConnectionFactory和Destination;