上云无忧 > 文档中心 > 腾讯云消息队列 RocketMQ 消息拉取频率介绍
消息队列 RocketMQ 版
腾讯云消息队列 RocketMQ 消息拉取频率介绍

文档简介:
RocketMQ 有两种常用的消费模式,Pull 和 Push,而 Push 模式的实现是基于 Pull 模式,只不过对 Pull 模式做了个包装,所以 RocketMQ Push 模式并不是真正意义上的推模式,还是拉模式。
*此产品及展示信息均由腾讯云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠
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,这时候,因为要拉取重试队列,所以消费拉取频率还会上升。
相似文档
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部