您好,登錄后才能下訂單哦!
這樣的場景你一定不陌生:小王到M記點餐之后,服務(wù)員給了他一個號牌,并讓他在柜臺桌子前方等待叫號取餐。每個人都按照自己付款拿到的號牌順序排隊等叫號。即使店里人再多,也不會顯得沒有秩序。
在上述場景中,柜臺其實就充當(dāng)了一個消息隊列(Message Queue)。小王等生產(chǎn)者把訂餐的消息發(fā)送到柜臺即消息隊列里,又從其中取了餐即消費了消息,可以說這就是消息隊列的一個完整走向——消息被發(fā)送到隊列中,又成功被消費者消費?!跋㈥犃小笔窃谙⒌膫鬏斶^程中保存消息的容器,隊列的主要目的是提供路由并保證消息的傳遞。如果發(fā)送消息時接收者不可用,消息隊列會保留消息,直到可以成功地傳遞它。
一般來說,消息隊列是一種異步的服務(wù)間通信方式,是分布式系統(tǒng)中重要的組件,主要解決應(yīng)用耦合,異步消息,流量削鋒等問題,實現(xiàn)高性能,高可用,可伸縮和最終一致性架構(gòu)。使用較多的消息隊列有ActiveMQ、RocketMQ、RabbitMQ、Kafka等。
在消息隊列的基礎(chǔ)上,穩(wěn)定可靠的消息隊列服務(wù)——分布式消息服務(wù)應(yīng)運而生。分布式消息服務(wù)(Distributed Message Service,簡稱DMS)是一項基于高可用分布式集群技術(shù)的消息中間件服務(wù),提供普通隊列、有序隊列、Kafka隊列、ActiveMQ、RabbitMQ,兼容HTTP、TCP、AMQP協(xié)議,為分布式應(yīng)用提供低延遲、高并發(fā)的異步通信機制。其生產(chǎn)和消費消息的示意圖如下圖所示。
消息生產(chǎn)者即發(fā)送消息的一方,也叫消息發(fā)送者,發(fā)送消息到指定的消息隊列中。生產(chǎn)者將消息M發(fā)送到隊列中。消息M在隊列中冗余分布,存在多個副本。
消費消息的一方,也叫消息接收者,通過調(diào)用消息服務(wù)的消費接口從隊列中讀取消息。消費者從隊列中消費消息,獲取到消息M。在消費者消費消息M期間,消息M仍然停留在隊列中,但消息M從被消費開始的30秒內(nèi)不能被該消費組再次消費,若在這30秒內(nèi)沒有被消費者確認消費完成,則DMS認為消息M未消費成功,將可以被繼續(xù)消費。
消費者確認消息M消費完成,消息M將不能被該消費者所在消費組消費。消息M仍然保持在隊列中,并且可以被其它消費組消費,消息在隊列中的保留時間為至少72小時(除非隊列被刪除),72小時后將會被刪除。
以上就是對分布式消息服務(wù)原理的淺析,在實際選型時,可以結(jié)合自身需求去考慮不同的消息隊列產(chǎn)品。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。