其实,消息队列中队列二字带有误导性,现代消息队列组件的所能提供的功能已远远超出了数据结构中队列所能代表的范围。
消息队列的演进
队列模型

传统的队列功能,先进先出,严格有序。如果有多个消费者,则需要竞争消息,每份消息只能消费一次。
发布-订阅模型

- 发布者:消息的发送主
- 订阅者:消息的接收方
- 主题:存放消息的容器
此种模型可以使得同一份消息被多个消息者消费。让发布者和订阅者解耦
RabbitMQ消息模型
少数严格坚持使用队列模型的产品之一,通过引入exchange解决多消费者问题
RocketMQ消息模型
使用的是标准的发布-订阅模型。
几乎所有的MQ产品都有ACK来确保消息不会在传递过程中丢失,这个机制很好地保证了消息的可靠性,但为了有序性,在前一条消息被成功消费之前,下一条消息是不能被消费的。
RocketMQ也有队列(Queue)的概念,每个主题包含多个队列,通过多个个队列来实现多实例并行生产和消费
Kafka消息模型
同RocketMQ是完全一样的,唯一区别是队列在kafka中收分区(Partition)