JMS基本概念

z1340954953發表於2018-07-25

介紹

 Java Message Service(JMS)是SUN提出的旨在統一各種MOMMessage-Oriented Middleware 系統介面的規範,包含點對點(Point to Point,PTP)和釋出/訂閱(Publish/Subscribe,pub/sub)兩種訊息模型,提供可靠的訊息傳輸、事務和訊息過濾機制。

簡單的說,JMS制定了一個發訊息的規範。是一個與具體平臺無關的API,絕大多數MOM提供商都對JMS提供支援。

ActiveMQApache出品的開源專案,它是JMS規範的一個實現。

JMS模型

1. 點對點模型(基於佇列) 

每個訊息只能有一個消費者。訊息的生產者和消費者之間沒有時間上的相關性,可以有多個傳送者,但是隻能被一個消費者消費

設計到的概念:

1. 訊息佇列(Queue)

2. 傳送者(Sender)

3. 接受者(Receiver)

4. 每個訊息被髮送到一個指定的佇列,接受者從佇列中消費訊息。佇列中保留訊息直到被消費或者超時

特點:

1. 每個訊息只能有一個消費者,一旦訊息被消費成功,就會從佇列中移除

2. 傳送者和接受者沒有時間上的依賴性,訊息是否被髮送成功,不會受到接受者的影響

3. 接受者沒有訊息可以消費處於阻塞狀態,接受者接受到訊息會向佇列應答成功。

適合場景:

佇列中的每個訊息都必須被消費。


2. 釋出訂閱模型

 概念:

1. 主題(Topic)

2. 釋出者(Publisher)

3. 訂閱者(Receiver)

4. 多個釋出者將訊息傳送到主題,多個訂閱者從主題取出訊息

特點:

1. 一個訊息可以有多個消費者

2. 釋出者和訂閱者存在時間上的依賴性,訂閱主題的消費者,只能消費在它訂閱之後的訊息

3. 為了緩和嚴格的時間相關性。jms允許建立一個持久的訂閱,這樣即使訂閱者沒有啟用,也能收到訊息

適合:

訊息被一個或者多個訂閱者消費,或者不消費

消費的同步和非同步

在jms中訊息的產生和訊息的消費是非同步的。消費訊息有同步和非同步兩種模式

同步:

訂閱者或接收者呼叫receive方法來接收訊息,receive方法在能夠接收到訊息之前(或超時之前)將一直阻塞 

非同步:

訂閱者或接收者可以註冊為一個訊息監聽器。當訊息到達之後,系統自動呼叫監聽器的onMessage方法。

JMS程式設計模型

(1) ConnectionFactory

建立Connection物件的工廠,針對兩種不同的jms訊息模型,分別有QueueConnectionFactory和TopicConnectionFactory兩種。可以通過JNDI來查詢ConnectionFactory物件。

(2) Destination

Destination的意思是訊息生產者的訊息傳送目標或者說訊息消費者的訊息來源。對於訊息生產者來說,它的Destination是某個佇列(Queue)或某個主題(Topic);對於訊息消費者來說,它的Destination也是某個佇列或主題(即訊息來源)。

所以,Destination實際上就是兩種型別的物件:Queue、Topic可以通過JNDI來查詢Destination。

(3) Connection

Connection表示在客戶端和JMS系統之間建立的連結(對TCP/IP socket的包裝)。Connection可以產生一個或多個Session。跟ConnectionFactory一樣,Connection也有兩種型別:QueueConnection和TopicConnection。

(4) Session

Session是我們操作訊息的介面。可以通過session建立生產者、消費者、訊息等。Session提供了事務的功能。當我們需要使用session傳送/接收多個訊息時,可以將這些傳送/接收動作放到一個事務中。同樣,也分QueueSession和TopicSession。

(5) 訊息的生產者

訊息生產者由Session建立,並用於將訊息傳送到Destination。同樣,訊息生產者分兩種型別:QueueSender和TopicPublisher。可以呼叫訊息生產者的方法(send或publish方法)傳送訊息。

(6) 訊息消費者

訊息消費者由Session建立,用於接收被髮送到Destination的訊息。兩種型別:QueueReceiver和TopicSubscriber。可分別通過session的createReceiver(Queue)或createSubscriber(Topic)來建立。當然,也可以session的creatDurableSubscriber方法來建立持久化的訂閱者。

(7) MessageListener

訊息監聽器。如果註冊了訊息監聽器,一旦訊息到達,將自動呼叫監聽器的onMessage方法。EJB中的MDB(Message-Driven Bean)就是一種MessageListener。

企業訊息系統的好處

我們先來看看下圖,應用程式A將Message傳送到伺服器上,然後應用程式B從伺服器中接收A發來的訊息,通過這個圖我們一起來分析一下JMS的好處:  

提供訊息靈活性,鬆散耦合,非同步性

轉載:https://blog.csdn.net/jiuqiyuliang/article/details/46701559

相關文章