点对点(队列)与发布订阅两种消息模型对比

153 阅读2分钟

摘要: 1 张图,512 个字,让你在 3 分钟彻底搞懂点对点(队列)与发布订阅两种消息模型的异同,以及主流消息中间件分别采取的消息模型横评。

消息模型是消息中间件的关键概念,选择不同的消息模型决定了消息中间件的设计思路,常用的消息模型有两种,一种是点对点模型(队列模型)和发布订阅模型。发布订阅模型是为了解决点对点模型(队列模型)的部分不足演化而来。 消息传输模型对比.gif

点对点模型

生产者与消费者通过消息队列建立关系,所以又称其为队列模型。多个消费者共享消息队列中的消息,每条消息都只会被唯一的消费者处理。通常情况下采取单一生产者与单一消费者的使用方式。

发布订阅模型

消费者通过主题与生产者建立订阅关系,生产者将消息发送到主题中,而消费者接收来自主题的消息。同一个主题内的消息可以被多个订阅组中消费者处理,每个订阅组中消费者都可以拿到全量消息。

通常情况下也是通过消息队列存储消息,为了提升系统负载以及提高并发,同一个主题下通常采用多个消息队列存储消息。而在同一个订阅组内不同消费者也可以分别接收不同消息队列内消息。

如果采用一个生产者与订阅组的方式,可以实现类似点对点模型(队列模型)。

开源消息中间件所属模型分类

点对点模型(队列模型)发布订阅模型
ActiveMQ
RabbitMQ-
RocketMQ-
Kafka-
Pulsar-

这里 RabbitMQ 本质上采用的是 点对点模型(队列模型),只不同 RabbitMQ 在生产者和消费者之间引入了一个 exchange 的概念,生产者将消息发送到 exchange 中,然后 exchange 根据配置的消费策略将消息发送到相应的消息队列中。


本文为 1KB 专栏系列文章。在这一专栏中,我将通过 1 张图,512 个字左右,让你在 3 分钟彻底搞懂一个技术领域问题、概念与知识。不论是日常工作还是面试准备,都可以快速检索与浏览。

如果您发现文章内容中任何不准确或遗漏的部分。非常希望您能评论指正,我将尽快修正疏漏,为大家提供优质技术内容。

你好,我是 HAibiiin,一名探索技术之外更多可能性的 Product Engineer。如果本篇文章对你有所启发或提供了一定价值,还请不要吝啬点赞、收藏和关注。

haibiiin.github.io.png