推/拉模式

推模式 (服务端主动推送至消费者)
消费者的处理消息的能力很弱,而消息中间件不断地向消费者Push消息,造成消息堆积,消费者的缓冲区可能会溢出

拉模式 (消费者主动拉去服务端消息)
增加消息的延迟,取决于轮询间隔

RabbitMQ(推模式)

RabbitMQ实现了AMQP协议,AMQP协议定义了消息路由规则和方式。

生产端通过路由规则发送消息到不同queue,消费端根据queue名称消费消息。

RabbitMQ既支持内存队列也支持持久化队列,消费端为推模型,消费状态和订阅关系由服务端负责维护,消息消费完后立即删除,不保留历史消息。

(1)点对点

生产端发送一条消息通过路由投递到Queue,只有一个消费者能消费到。

(2)多订阅

当RabbitMQ需要支持多订阅时,发布者发送的消息通过路由同时写到多个Queue,不同订阅组消费不同的Queue。
所以支持多订阅时,消息会多个拷贝。

Kafka(拉模式)

Kafka只支持消息持久化,消费端为拉模型,消费状态和订阅关系由客户端端负责维护,消息消费完后不会立即删除,会保留历史消息。

因此支持多订阅时,消息只会存储一份就可以了。但是可能产生重复消费的情况。

(1)点对点&多订阅(因为不删消息,所以这两种就不区分了)

发布者生产一条消息到topic中,不同订阅组消费此消息。

原文地址:https://www.cnblogs.com/itplay/p/13261051.html