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