推模式 (服务端主动推送至消费者)
消费者的处理消息的能力很弱,而消息中间件不断地向消费者Push消息,造成消息堆积,消费者的缓冲区可能会溢出拉模式 (消费者主动拉去服务端消息)
增加消息的延迟,取决于轮询间隔
RabbitMQ(推模式)
RabbitMQ实现了AMQP协议,AMQP协议定义了消息路由规则和方式。
生产端通过路由规则发送消息到不同queue,消费端根据queue名称消费消息。
RabbitMQ既支持内存队列也支持持久化队列,消费端为推模型,消费状态和订阅关系由服务端负责维护,消息消费完后立即删除,不保留历史消息。
(1)点对点
生产端发送一条消息通过路由投递到Queue,只有一个消费者能消费到。
(2)多订阅
当RabbitMQ需要支持多订阅时,发布者发送的消息通过路由同时写到多个Queue,不同订阅组消费不同的Queue。
所以支持多订阅时,消息会多个拷贝。
Kafka(拉模式)
Kafka只支持消息持久化,消费端为拉模型,消费状态和订阅关系由客户端端负责维护,消息消费完后不会立即删除,会保留历史消息。
因此支持多订阅时,消息只会存储一份就可以了。但是可能产生重复消费的情况。
(1)点对点&多订阅(因为不删消息,所以这两种就不区分了)
发布者生产一条消息到topic中,不同订阅组消费此消息。