mq

MQ 系列 消息模型

消息中间件基本模型

Posted by lichao modified on April 29, 2021

对于消息中间件而言,一般有两种消息投递模式:点对点(P2P, Point-to-Point)模式和发布/订阅( Pub/Sub )模式。

点对点模式

点对点模式是基于队列的,消息生产者发送消息到队列,消息消费者从队列中接收消息。

订阅与发布

发布订阅模式定义了如何向一个内容节点发布和订阅消息,这个内容节点称为主题( Topic ),主题可以认为是消息传递的中介,消息发布者将消息发布到某个主题,而消息订阅者从主题中订阅消息。主题使得消息的订阅者和发布者互相保持独立,不需要进行接触即可保证消息的传递,发布/订阅模式在消息的一对多广播时采用。

消息发布是指某个生产者向某个 topic 发送消息;消息订阅是指某个消费者关注了某个 topic 中带有某些 tag 的消息,进而从该topic消费数据。

主题是承载真实数据的逻辑容器,而在主题之下还分为若干个分区。分区的作用是提供负载均衡的能力,或者说对数据进行分区的主要原因,就是为了实现系统的高伸缩性(Scalability)。不同的分区能够被放置到不同节点的机器上,而数据的读写操作也都是针对分区这个粒度进行的,这样每个节点的机器都能独立地执行各自分区的读写请求处理。还可以通过添加新的节点机器来增加整体系统的吞吐量。

正是得益于消费者与消费组模型的契合:

  • 如果所有的消费者都隶属于同一个消费组,那么所有的消息都会被均衡地投递给每一个消费者,即每条消息只会被一个消费者处理,这就相当于点对点模式的应用。
  • 如果所有的消费者都隶属于不同的消费组,那么所有的消息都会被广播给所有的消费者,即每条消息会被所有的消费者处理,这就相当于发布/订阅模式的应用。