其實,消息隊列中隊列二字帶有誤導性,現代消息隊列組件的所能提供的功能已遠遠超出了數據結構中隊列所能代表的范圍。
消息隊列的演進
隊列模型

傳統的隊列功能,先進先出,嚴格有序。如果有多個消費者,則需要競爭消息,每份消息只能消費一次。
發布-訂閱模型

- 發布者:消息的發送主
- 訂閱者:消息的接收方
- 主題:存放消息的容器
此種模型可以使得同一份消息被多個消息者消費。讓發布者和訂閱者解耦
RabbitMQ消息模型
少數嚴格堅持使用隊列模型的產品之一,通過引入exchange解決多消費者問題
RocketMQ消息模型
使用的是標准的發布-訂閱模型。
幾乎所有的MQ產品都有ACK來確保消息不會在傳遞過程中丟失,這個機制很好地保證了消息的可靠性,但為了有序性,在前一條消息被成功消費之前,下一條消息是不能被消費的。
RocketMQ也有隊列(Queue)的概念,每個主題包含多個隊列,通過多個個隊列來實現多實例並行生產和消費
Kafka消息模型
同RocketMQ是完全一樣的,唯一區別是隊列在kafka中收分區(Partition)