JMS 是 Java 面向消息的中間件 (MOM) 的實(shí)現(xiàn),并且是用于在 MQ(消息隊(duì)列)服務(wù)器中發(fā)送和接收消息的 DeFacto 標(biāo)準(zhǔn)。 MQ 服務(wù)器充當(dāng)消息發(fā)送方和接收方之間的中間人;這是在消息隊(duì)列的幫助下完成的。想學(xué)習(xí)java技術(shù),建議考慮報(bào)名參加Java培訓(xùn),有明確的學(xué)習(xí)路線和全面系統(tǒng)的課程,能獲得較快提升。
Spring JMS 可以有效地用于建立應(yīng)用程序之間的通信。可以開(kāi)發(fā)一個(gè)面向消息的中間件,通常稱為 MQ 服務(wù)器,以建立通信。消息隊(duì)列或 MQ 服務(wù)器的主要好處是它支持松散耦合的異步應(yīng)用程序集成。
假設(shè),在一個(gè)不同的系統(tǒng)中,運(yùn)行在不同機(jī)器上的應(yīng)用程序需要通信/我們有什么選擇?當(dāng)然,我們可以使用 SOAP 或 REST Web 服務(wù),但我們還有其他選擇嗎?毫無(wú)疑問(wèn),Web 服務(wù)是一個(gè)可行的選擇,但在許多情況下,它可能不可用甚至無(wú)法使用。在這種情況下,我們可以使用 JMS 并通過(guò)實(shí)現(xiàn) MQ 服務(wù)器將我們的消息放入消息隊(duì)列中。想要發(fā)送消息的應(yīng)用程序?qū)⑾⒁平唤o MQ 傳輸。然后它在向發(fā)送者確認(rèn)任何回執(zhí)之前立即將消息寫入磁盤。在消息交換期間,協(xié)議確保消息被傳遞并且沒(méi)有消息丟失。
消息傳遞技術(shù)
有兩種主要的消息傳遞模型:點(diǎn)對(duì)點(diǎn)和發(fā)布者-訂閱者。 MQ 服務(wù)器保留了一個(gè)隊(duì)列和主題列表,它們分別遵循這兩種模型。在這兩者中,MQ 服務(wù)器模型使應(yīng)用程序能夠連接并發(fā)送和接收消息。
隊(duì)列遵循點(diǎn)對(duì)點(diǎn)消息交換模型。當(dāng)生產(chǎn)者發(fā)送消息時(shí),它會(huì)被放入服務(wù)器維護(hù)的隊(duì)列中。消息被傳遞給作為下一個(gè)消費(fèi)者立即連接的那個(gè)。發(fā)送者和接收者是預(yù)定義的和靜態(tài)的。通過(guò)參加java培訓(xùn)課程,你可以學(xué)習(xí)更多java工具,以提高java技能。
另一方面,主題是發(fā)布者-訂閱者消息模型的實(shí)現(xiàn)。這里的想法更加通用,因?yàn)槿我鈹?shù)量的客戶端都可以訂閱主題內(nèi)的消息。因此,當(dāng)發(fā)布特定主題的消息時(shí),它會(huì)傳遞給所有訂閱該主題的客戶端。這種技術(shù)更具動(dòng)態(tài)性,因?yàn)榭梢栽谶\(yùn)行時(shí)更改指定的發(fā)布者訂閱者角色。
JMS的關(guān)鍵組件如下:
JMS Provider:它是一個(gè)提供消息代理服務(wù)的MOM實(shí)現(xiàn)。 此外,它還提供了管理和控制所需的其他功能,這些功能對(duì)于功能齊全的消息傳遞產(chǎn)品(ActiveMQ、IBM MQ 等)是必不可少的。
JMS 客戶端:JMS 客戶端是接收和發(fā)送消息的應(yīng)用程序。
JMS 生產(chǎn)者或發(fā)布者:它表示兩種類型的 JMS 客戶端,它們使用消息隊(duì)列或主題發(fā)送消息,如上所述。
JMS 消費(fèi)者或訂閱者:它表示兩種類型的 JMS 客戶端,它們使用消息隊(duì)列或主題接收消息,如上所述。
JMS 應(yīng)用程序:托管一個(gè) JMS 提供者和許多 JMS 客戶端的 JMS 應(yīng)用程序。
ActiveMQ 服務(wù)器
有許多可用的 MQ 服務(wù)器實(shí)現(xiàn),例如 IBM MQ、RabbitMQ、Apache ActiveMQ 等。 在這里,我們將主要關(guān)注 ActiveMQ,因?yàn)樗芰餍小㈤_(kāi)源、免費(fèi)并且是用 Java 編寫的。 ActiveMQ 支持許多跨語(yǔ)言客戶端和協(xié)議,例如 C、C++、C#、Ruby、Perl、Python、PHP,當(dāng)然還有 Java。 ActiveMQ 可以很容易地嵌入到 Spring 應(yīng)用程序中,并且 Spring BOOT 支持為它提供了一個(gè)現(xiàn)成的啟動(dòng)器。
它是如何工作的?
生產(chǎn)者連接到 MQ 服務(wù)器并開(kāi)始向隊(duì)列或主題發(fā)送消息。 消費(fèi)者連接到服務(wù)器并開(kāi)始從隊(duì)列或感興趣的主題接收消息。 從使用 API 的角度來(lái)看,它們都是相同的。 從 JMS 1.1 開(kāi)始,API 已經(jīng)統(tǒng)一,在處理隊(duì)列或主題時(shí)沒(méi)有區(qū)別。對(duì)Java 感興趣的同學(xué)可以報(bào)名參加java培訓(xùn),有經(jīng)驗(yàn)豐富的專業(yè)講師指導(dǎo)教學(xué),可以讓你快速掌握這門技術(shù),節(jié)約時(shí)間,少走彎路。