前言
- 总结下消息队列采用推模式和拉模式的优点和缺点
内容
推模式
- Broker 来主导消息的发送, Consumer 被动接受消息
优点
-
消息的实时性高,broker接受到消息后可以立刻推送
-
消费端接单,只需要等待消息的到来
缺点
- 无法考虑到Consumer 的消费速率,容易发生爆仓的现象
适用范围
- 消息量不大,消费能力强,消息的实效性要求高
拉模式
- Consumer 主动向 Broker 拉去数据
优点
-
Broker相对轻松,只需要存储数据,等待请求,发送数据
-
更加适合消息的批量发送
缺点
-
消息延迟严重
-
消息忙请求:消息非常久才产生一条,那么前面那段时间内,消费者发起的请求都是无效的
使用范围
- 消息量大,消息实效性要求不高
选择
-
RocketMQ 和 Kafka 都选择了拉模式
-
RabbitMQ 可以自动选择拉模式和推模式
-
ActiveMQ 选择了推模式
-
个人觉得拉模式更加的合适,因为现在的消息队列都有持久化消息的需求,也就是说本身它就有个存储功能,它的使命就是接受消息,保存好消息使得消费者可以消费消息即可。
优化
- 为了解决拉模式的消息延迟问题,RocketMQ 和 Kafka 利用“长轮询”来优化