您好,登錄后才能下訂單哦!
本篇內容主要講解“消息隊列的特點是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“消息隊列的特點是什么”吧!
消息隊列( Message Queue )是一種進程間通信或同一進程的不同線程間的通信方式。進程或者線程之間通過 消息 進行通信,消息發送后可以立即返回,由消息系統來確保信息的可靠傳遞,消息發布者(生產者)只管把消息發布到消息隊里中而不用管誰來消費,消息使用者(消費者)只管從消息隊列中獲取消息以進一步處理而不用管理誰發布的消息,這樣發布者和使用者都不用知道對方的存在。
消息( Message )是指在應用之間傳送的數據。消息可以非常簡單,比如只包含文本字符串,也可以很復雜,如嵌入對象。
通過提供 消息傳遞 和 消息排隊 模型,它可以在 分布式環境 下提供 應用解耦 、 彈性伸縮 、 冗余存儲 、 流量削峰 、 異步通信 、 數據同步 等等功能,其作為 分布式系統架構 中的一個重要組件,有著舉足輕重的地位。消息隊列主要特點有:
異步性:將耗時的同步操作,通過以發送消息的方式,進行了異步化處理。減少了同步等待的時間。
松耦合:消息隊列減少了服務之間的耦合性,不同的服務可以通過消息隊列進行通信,而不用關心彼此的實現細節,只要定義好消息的格式就行
分布式:通過對消費者的橫向擴展,降低了消息隊列阻塞的風險,以及單個消費者產生單點故障的可能性。
可靠性:消息隊列一般會把接收的消息存儲到本地硬盤上(當消息被處理完之后,存儲信息根據不同的消息隊列實現,有可能將其刪除),這樣即使應用掛掉或者消息隊列本身掛掉,消息也能夠重新加載。
同步處理是指從請求的發起一直到最終的處理完成期間,請求的調用方一直在同步阻塞等待調用的處理完成。
異步處理處理是指在請求發起的處理過程中,客戶端的代碼已經返回了,它可以繼續進行自己的后續操作,而不需要等待調用處理完成。
對一些比較耗時且不需要即時(同步)返回操作結果的操作,可以把處理過程通過消息隊列進行異步處理。這樣做可以推遲耗時操作的處理,使耗時操作異步化,而不必阻塞客戶端程序,客戶端的程序在得到處理結果之前可以繼續執行,從而提高客戶端程序的處理性能。
異步處理的主要目的是 減少請求響應時間 ,實現非核心流程異步化,提高系統響應性能。
使用消息隊列,可以有多個生產者發布消息,多個消費者消費消息,共同完成整個的業務處理邏輯,生產者只關心是否正確將消息寫入消息隊列,消費者只關心從消息隊列中獲取消息,然后進行處理邏輯,生產者和消費者之間不需要直接的交互調用,沒有代碼的依賴耦合。
耦合度越低程序代碼越容易維護,也容易進行擴展。
一般在秒殺活動中廣泛使用。
在秒殺活動中,一般由于瞬時訪問量過大,服務器瞬間接收了大量的請求,流量暴增,這種情況下很有可能導致相關系統無法處理請求甚至崩潰。為了解決這個問題,一般會在應用的前端加入消息隊列。
請求先寫入消息隊列,而不是由業務系統直接處理,做了一次緩沖,極大的減少了業務處理系統的壓力。
隊列的長度可以做限制,一般秒殺活動都是有數量限制的,后寫入隊列的用戶無法秒殺到商品,這樣的請求可以直接被拋棄,可以直接返回活動已結束或商品已售完。
使用消息隊列,即便是訪問流量持續的增長,系統依然可以持續的接收請求。雖然生產者生成的消息比消費者消費的速度快,但是通過消息隊列進行了緩沖,在短時間內,生產者和消費者之間處理能力不會互相影響,同樣也可以保證系統的穩定性。
消息隊列一般都內置了高效的通信機制,因此可以用于單純的消息通訊,比如實現點對點消息隊列或者聊天室。
如果沒有消息隊列,每當一個新的業務方介入,那都需要聯調一次接口。有了消息隊列,只需要關系消息是否送達了隊列,至于誰希望訂閱,是下游的事情,無疑極大地減少了開發和聯調的工作量。
將消息隊列用在日志處理中,解決了大量日志傳輸的問題(如Kafka)。
點對點模式用于 消息生產者 和 消息消費者 之間 點到點 的通信。消息生產者將消息發送到由某個名字標識的特定隊列( Queue
)。在消息傳遞給消費者之前它被 存儲 在這個隊列中。 隊列消息 可以放在 內存 中也可以 持久化 ,以保證在消息服務出現故障時仍然能夠傳遞消息。
每個消息只有一個消費者(Consumer),即一旦消息被消費,消息就不再在消息隊列中。
生產者和消費者之間沒有依賴性,生產者發送消息之后,不管有沒有消費者在運行,都不會影響到生產者下次發送消息。
消費者在成功接收消息之后需向隊列應答成功,以便消息隊列刪除當前接收的消息。
發布者/訂閱者模型支持向一個特定的 消息主題 生產消息。 0 或多個 訂閱者 可能對接收來自 特定消息主題 的消息感興趣。
在這種模型下,發布者和訂閱者彼此不知道對方。多個消費者可以獲得消息,在 發布者 和 訂閱者 之間存在 時間依賴性 。發布者需要建立一個 訂閱 ( subscription
),以便能夠消費者訂閱。 訂閱者 必須保持 持續的活動狀態 并 接收消息 。
每個消息可以有多個訂閱者。
發布者和訂閱者之間有時間上的依賴性,針對某個主題(Topic)的訂閱者,它必須創建一個訂閱之后,才能消費發布者的消息。
為了消費消息,訂閱者需要提前訂閱該角色主題,并保持在線運行。
目前在生產環境,使用較多的消息隊列有 ActiveMQ 、 RabbitMQ 、 ZeroMQ 、 Kafka 、 MetaMQ 、 RocketMQ 等。
到此,相信大家對“消息隊列的特點是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。