消息模型: 主题和队列有什么区别
1.区别
队列是一种数据结构,有完整而严格的定义。
队列: 先进先出
注: 多个生产者发送信息为所有消息合集,顺序为生产者发送消息的自然顺序。
多个消费者时,任何一条消息只能被一个消费者收到
多个消费者需要共享一个消息,演化出“发布-订阅模型”
注:队列和发布-订阅模型最大区别就是一份消息数据能不能被消费多次的问题
2. RabbitMQ的消息模型
依然使用队列模型
配置Exchange将消息发送到多个队列,每个队列中都存放一份完整的消息数据。
3. RocketMQ的消息模型
- 标准的发布-订阅模型
- 也有队列概念:请求-确认机制
- 问题:为了确保消息的有序性,在有一条消息被成功消费之前,下一条消息不能被消费,否则会出现消息空洞,违背有序性原则
- 解决这个问题增加了队列概念:每个主题包含多个队列,通过多个队列来实现多实例并行生产和消费
- 只在队列上保证消息有序性,主题层面是无法保证的
- 订阅者为通过消费组来实现的,不同消费组之间消费进度彼此不受影响。
- 消费组内多个消费者是竞争关系
- 消息队列上维护一个消费位置
4. Kafka的消息模型
- 模型和RocketMQ一样
- 唯一区别,队列概念名称不一样,这里为“分区”,含义和功能没有区别