消费消息是 push 还是 pull ?

参考答案

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—

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧