消息队列推和拉的区别

1,018 阅读1分钟

前言

  • 总结下消息队列采用推模式和拉模式的优点和缺点

内容

推模式

  • Broker 来主导消息的发送, Consumer 被动接受消息

优点

  • 消息的实时性高,broker接受到消息后可以立刻推送

  • 消费端接单,只需要等待消息的到来

缺点

  • 无法考虑到Consumer 的消费速率,容易发生爆仓的现象

适用范围

  • 消息量不大,消费能力强,消息的实效性要求高

拉模式

  • Consumer 主动向 Broker 拉去数据

优点

  • Broker相对轻松,只需要存储数据,等待请求,发送数据

  • 更加适合消息的批量发送

缺点

  • 消息延迟严重

  • 消息忙请求:消息非常久才产生一条,那么前面那段时间内,消费者发起的请求都是无效的

使用范围

  • 消息量大,消息实效性要求不高

选择

  • RocketMQ 和 Kafka 都选择了拉模式

  • RabbitMQ 可以自动选择拉模式和推模式

  • ActiveMQ 选择了推模式

  • 个人觉得拉模式更加的合适,因为现在的消息队列都有持久化消息的需求,也就是说本身它就有个存储功能,它的使命就是接受消息,保存好消息使得消费者可以消费消息即可。

优化

  • 为了解决拉模式的消息延迟问题,RocketMQ 和 Kafka 利用“长轮询”来优化

参考