Home | 簡體中文 | 繁體中文 | 雜文 | 知乎專欄 | Github | OSChina 博客 | 雲社區 | 雲棲社區 | Facebook | Linkedin | 視頻教程 | 打賞(Donations) | About
知乎專欄多維度架構 微信號 netkiller-ebook | QQ群:128659835 請註明“讀者”

17.2. 你是否真正理解了消息隊列?

17.2.1. 消息隊列並不是實時的

消息隊列並不是實時的,它不能替代傳統 TCP/UDP Socket 通信。

			
消息生產者 —> 消息隊列伺服器 —> 消息消費者			
			
			

消息隊列中有 Switch (交換機) 的概念,事實上消息隊列的工作方式的確跟網絡交換機類似,網絡交換機是TCP/UDP包的接收存儲和轉發,消息隊列是消息的存儲與轉發。

從生產者到達消費者是有延遲的,尤其是多個生產者持續生產和多個消費者持續消費,消息伺服器會出現瓶頸,消息會出現堆積情況,這時消息的生產和消費都會出現延遲,且時間不可控。

類似消息通知這種需求,是非實時的需求,不考慮發送延遲和達到時間,可以使用消息隊列解決方案,否則還是使用 TCP Socket。

17.2.2. 不能替代非同步執行

當使用消息隊列替代非同步執行的時候也會出現前面所說的執行時間不可控。所以不是所有場景都適合使用消息隊列的,更多時候我們開啟一個綫程去非同步執行效果可能更好。