tencent cloud

文档反馈

消息拉取频率介绍

最后更新时间:2023-10-19 11:08:58
    RocketMQ 有两种常用的消费模式,Pull 和 Push,而 Push 模式的实现是基于 Pull 模式,只不过对 Pull 模式做了个包装,所以 RocketMQ Push 模式并不是真正意义上的推模式,还是拉模式。
    可以认为 RocketMQ SDK 会不断的进行消息拉取任务。对于每一次拉取的结果:
    当从 broker 拉取到消息后,如果消息被过滤掉(例如 tag 过滤),则继续将拉取请求放入阻塞队列中继续循环执行消息拉取任务,否则将消息放入消费者消费线程去执行,而将拉取请求放入阻塞队列中。
    如果从 broker 端没有可拉取的新消息或者没有匹配到消息,则将 pullRequest 放入阻塞队列中继续循环执行消息拉取任务。
    从这里可以看到,如果用户没有消息生产,只要有消费者在线,那么都会周期性的向服务端请求,这种请求也能保证消息消费的及时性。如果用户想减少拉取次数,

    如何处理

    对于 Pull 模式的消费者,由于用户完全自主控制拉取频率,所以用户只需要自己在拉取一次之后,进行对应的等待,或者使用对应的限流组件来控制。
    而对于 Push 模式的消费者,那么可以设置 PullInterval 拉长拉取间隔。
     // 设置拉取间隔 60秒
    pushConsumer.setPullInterval(60 * 1000);
    注意:
    但是相应的需要注意,消息消费的延迟可能上升,修改需要谨慎。
    如果用户生产消息量很少,基本上会命中长轮训的时间,目前 SDK 固定了长轮训是15秒,也就是说,对于一个 queue,一个 broker,每分钟最少会发起4次拉取。如果有10个 Topic,每个 Topic 3个队列,服务端有2个 broker,那么这个拉取数量为10*3*2*4=240,也就是每秒4个拉取。
    运行过程中,会随着用户生产消费,可能产生重试 Topic,这时候,因为要拉取重试队列,所以消费拉取频率还会上升。
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持