参考答案
RocketMQ 没有真正意义的 push ,都是 pull ,虽然有 push 类,但实际底层实现采用的是长轮询机制,即拉取方式。
Broker 端属性 longPollingEnable 标记,默认开启长轮询。
延伸问题:
为什么要主动拉取消息,而不使用事件监听方式?
事件驱动方式是建立好长连接,由事件(发送数据)的方式来实时推送。
如果 Broker 主动推送消息,有可能出现 push 速度快,消费速度慢的情况,就会造成消息在 consumer 端堆积过多,同时又不能被其他 consumer 消费的情况。
而 pull 的方式,可以根据当前自身情况来 pull ,不会造成过多的压力而造成瓶颈,所以采取了 pull 的方式。
// 1. 创建消费者(Pull)对象 DefaultMQPullConsumer consumer = new DefaultMQPullConsumer("GROUP_TEST");
// 1. 创建消费者(Push)对象 DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("GROUP_TEST");
以上,是消息队列 RocketMQ 面试题【消费消息是 push 还是 pull ?】的参考答案。
输出,是最好的学习方法。
欢迎在评论区留下你的问题、笔记或知识点补充~
—end—