rocketmq源码-consumer拉取消息(push模式)

本文深入探讨RocketMQ消费者在Push模式下如何拉取消息,包括同步请求、异步发送请求的流程,以及顺序消费和平行消费的实现细节。文章分析了PullMessageService、DefaultMQPushConsumerImpl等关键类的源码,揭示了消息拉取、处理和回调的完整过程。
摘要由CSDN通过智能技术生成

前言

在前面consumer启动的博客中,有说过,在启动过程中,有两个比较重要的逻辑,分别是负载均衡和拉取消息的service,这篇博客,主要记录拉取消息的service,因为前面的demo和这篇笔记中的demo,都是基于push模式来学习的,所以前面的笔记都是基于push模式的,但是最近看了下pull模式,和push模式的代码还是有点区别的,所以后面单独起一篇博客,记录pull模式的逻辑

源码

org.apache.rocketmq.client.impl.consumer.PullMessageService#run

前面有说过,拉取消息,使用的是这个service,所以我们从这个service的入口处开始看起
这里会发现,只有两行代码

  1. 从一个queue中拉取到一个pullRequest请求体
  2. 然后调用pullMessage方法
    这里的这个queue很重要,这个queue中存放的是拉取消息的请求,会再调用pullMessage()方法拉取到消息,各个消费者处理完之后,再放到pullRequestQueue中一个请求,所以这里就会在本次拉取消息的请求完成之后,接着取pullRequest,再次触发拉取消息的请求

这里有一个很重要的逻辑:既然拉取消息的请求,是从pullRequestQueue中开始的,那在consumer启动之后,第一次拉取消息的pullRequest是什么放进队列里面的呢?因为这里看到只是去取数据,总要有一个地方,先放进去一个请求,才会开始拉取消息;第一次把pullRequest放到queue中,是在负载均衡分配了messageQueue之后,会构建pullRequest,然后把请求放到queue中,在后面负载均衡的service笔记中会记录
在这里插入图片描述

我们接着来看pullMessage()的相关逻辑:
会发现,在这个方法中&

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值