JMS小記

前幾天組長面試別人的時候問了些關(guān)于JMS的問題,后來順便問了我一下。hmmm沒接觸過這技術(shù)當然是一臉懵逼,所以索性花了點時間上網(wǎng)搜了一下相關(guān)的內(nèi)容然后自己總結(jié)一下。

什么是JMS?

JMS是Java消息中間件服務(wù)的應(yīng)用程序接口,用于Java平臺中應(yīng)用程序之間的異步通信。到這里想提一下MQ,MQ是應(yīng)用程序?qū)?yīng)用程序之間的通信方法,是遵循AMQP協(xié)議的具體實現(xiàn)和產(chǎn)物。

如何消費JMS產(chǎn)生的消息?

JMS中消息的產(chǎn)生和消費是異步的。但是消息被消費的方式有2種。

1.同步的消息消費方式。

消息接收者調(diào)用receive方法接收信息,在接到消息之前(或者超時前)一直阻塞。

2.異步的消息消費方式。

消息接收者注冊消息監(jiān)聽器,消息到達后調(diào)用監(jiān)聽器的onMessage方法。

消息消費模型

1.點對點模型

每個消息只有一個接收者,發(fā)送者和接收者沒有依賴關(guān)系。接收者接收成功有反饋信息。

如果希望每個消息都被成功處理應(yīng)該使用該模型。

2.發(fā)布/訂閱模型

每個消息可以有多個接收者,有時間依賴,必須訂閱之后才能消費消息。

因此訂閱者必須要一直處于在線狀態(tài)。

允許創(chuàng)建持久化訂閱,使沒有激活的訂閱者也能收到消息。

JMS對象模型

一般一個JMS對象模型包括以下幾個元素。

1.ConnectionFactory?

用于創(chuàng)建發(fā)送端和接收端之間連接的工廠類。針對不同的消息模型有 QueueConnectionFactory和TopicConnectionFactory,也可以在Tomcat的context.xml中配置然后通過JNDI來查找。

PS:JNDI是一個標準規(guī)范,類似JDBC,JMS等規(guī)范,為開發(fā)人員提供了查找和訪問各種命名和目錄服務(wù)的通用、統(tǒng)一接口。

2.Connection

發(fā)送端和接收端之間建立的連接,根據(jù)消息模型不同可以使用QueueConnection或者TopicConnection。用于創(chuàng)建Session。

3.Session

操作消息的接口??梢酝ㄟ^session創(chuàng)建生產(chǎn)者、消費者、消息等等。提供事務(wù)功能用于發(fā)送/接收多個消息。也分QueueSession和TopicSession。

4.Sender

由Sessoin創(chuàng)建,將消息發(fā)送到destination。根據(jù)消息模型不同可以使用QueueSender或者TopicPublisher。

5.Receiver

由Session創(chuàng)建,接收Destination發(fā)來的信息。根據(jù)消息模型不同可以使用QueueReceiver或者TopicSubscriber。可以通session的createDurableSubscriber方法來創(chuàng)建持久化的訂閱者。

6.Destinatoin

消息生產(chǎn)者的發(fā)送目標或者消息接受者的消息來源。 實際上就是Queue、Topic的對象。

7.MessageListener

消息監(jiān)聽器。如果注冊監(jiān)聽器,一旦消息達到就自動調(diào)用onMessage方法。


JMS提供五種不同的消息正文格式用于消息的發(fā)送以及接收。

1.StreamMessage -> 數(shù)據(jù)流消息

2.MapMessage -> 鍵值對消息

3.TextMessage -> 字符串消息

4.ObjectMessage -> 序列化對象消息

5.BytesMessage ->未解釋字節(jié)數(shù)據(jù)流消息

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容