更新時(shí)間:2022-03-29 11:51:14 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽3439次
消息隊(duì)列是一種異步服務(wù)到服務(wù)通信的形式,用于無(wú)服務(wù)器和微服務(wù)架構(gòu)。在消息隊(duì)列中,消息的發(fā)送者和接收者不需要同時(shí)交互,消息被保留在Java隊(duì)列中,直到接收者檢索它們。

消息隊(duì)列可用于解耦重量級(jí)處理、緩沖或批處理工作以及平滑尖峰工作負(fù)載。
更好的性能
消息隊(duì)列支持異步通信,這意味著產(chǎn)生和使用消息的端點(diǎn)與隊(duì)列交互,而不是彼此交互。生產(chǎn)者可以將請(qǐng)求添加到隊(duì)列中,而無(wú)需等待它們被處理。消費(fèi)者僅在消息可用時(shí)才處理它們。系統(tǒng)中的任何組件都不會(huì)停止等待另一個(gè)優(yōu)化數(shù)據(jù)流。
提高可靠性
隊(duì)列使您的數(shù)據(jù)持久化,并減少系統(tǒng)不同部分脫機(jī)時(shí)發(fā)生的錯(cuò)誤。通過(guò)使用消息隊(duì)列分隔不同的組件,您可以創(chuàng)建更多的容錯(cuò)性。如果系統(tǒng)的一部分永遠(yuǎn)無(wú)法訪問(wèn),另一部分仍然可以繼續(xù)與隊(duì)列交互。隊(duì)列本身也可以鏡像以獲得更高的可用性。
粒度可擴(kuò)展性
消息隊(duì)列可以在您需要的地方精確擴(kuò)展。當(dāng)工作負(fù)載達(dá)到峰值時(shí),應(yīng)用程序的多個(gè)實(shí)例都可以將請(qǐng)求添加到隊(duì)列中,而不會(huì)發(fā)生沖突。隨著這些傳入請(qǐng)求的隊(duì)列變長(zhǎng),您可以將工作負(fù)載分配給一組消費(fèi)者。生產(chǎn)者、消費(fèi)者和隊(duì)列本身都可以按需增長(zhǎng)和收縮。
簡(jiǎn)化解耦
消息隊(duì)列消除了組件之間的依賴關(guān)系,并顯著簡(jiǎn)化了解耦應(yīng)用程序的編碼。軟件組件不受通信代碼的影響,而是可以設(shè)計(jì)為執(zhí)行離散的業(yè)務(wù)功能。
消息隊(duì)列是一種非常簡(jiǎn)單的解耦Java分布式系統(tǒng)的方法,無(wú)論您使用的是單體應(yīng)用程序、微服務(wù)還是無(wú)服務(wù)器架構(gòu)。
點(diǎn)對(duì)點(diǎn)
點(diǎn)對(duì)點(diǎn)意味著消息通過(guò)隊(duì)列從一個(gè)應(yīng)用程序(生產(chǎn)者/發(fā)送者)發(fā)送到另一個(gè)應(yīng)用程序(消費(fèi)者/接收者)??梢杂卸鄠€(gè)消費(fèi)者在一個(gè)隊(duì)列上監(jiān)聽(tīng),但只有其中一個(gè)可以接收消息。因此,它是點(diǎn)對(duì)點(diǎn)或一對(duì)一。
發(fā)布/訂閱

消息隊(duì)列服務(wù)器有多種語(yǔ)言版本。例如 Erlang (RabbitMQ)、C (beanstalkd)、Ruby (Starling 或 Sparrow)、Scala (Kestrel、Kafka) 和 Java (ActiveMQ)。選擇特定的消息隊(duì)列服務(wù)器完全取決于用例。
另一方面,發(fā)布/訂閱是一種消息傳遞模型,其中消息通過(guò)主題發(fā)送給多個(gè)消費(fèi)者(或訂閱者)。主題是發(fā)布者和訂閱者之間的鏈接。訂閱者可能會(huì)或可能不會(huì)確認(rèn)發(fā)布的消息。
相關(guān)閱讀
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)