RocketMQ原理解析-consumer 3.长轮询
来源:互联网 发布:java可逆的加密算法 编辑:程序博客网 时间:2024/05/21 09:39
Rocketmq的消息是由consumer端主动到broker拉取的, consumer向broker发送拉消息请求, PullMessageService服务通过一个线程将阻塞队列LinkedBlockingQueue<PullRequest>中的PullRequest到broker拉取消息
DefaultMQPushConsumerImpl的pullMessage(pullRequest)方法执行向broker拉消息动作
1. 获取ProcessQueue判读是否drop的, drop为true返回
2. 给ProcessQueue设置拉消息时间戳
3. 流量控制,正在消费队列中消息(未被消费的)超过阀值,稍后在执行拉消息
4. 流量控制,正在消费队列中消息的跨度超过阀值(默认2000),稍后在消费
5. 根据topic获取订阅关系
6. 构建拉消息回调对象PullBack, 从broker拉取消息(异步拉取)返回结果是回调
7. 从内存中获取commitOffsetValue //TODO 这个值跟pullRequest.getNextOffset区别
8. 构建sysFlag pull接口用到的flag
9. 调底层通信层向broker发送拉消息请求
如果master压力过大,会建议去slave拉取消息
如果是到broker拉取消息清楚实时提交标记位,因为slave不允许实时提交消费进度,可以定时提交
//TODO 关于master拉消息实时提交指的是什么?
10. 拉到消息后回调PullCallback
处理broker返回结果pullResult
更新从哪个broker(master 还是slave)拉取消息
反序列化消息
消息过滤
消息中放入队列最大最小offset,方便应用来感知消息堆积度
将消息加入正在处理队列ProcessQueue
将消息提交到消费消息服务ConsumeMessageService
流控处理, 如果pullInterval参数大于0 (拉消息间隔,如果为了降低拉取速度,可以设置大于0的值),延迟再执行拉消息, 如果pullInterval为0立刻在执行拉消息动作
序列图
1. 向broker发送长轮询请求
2. Broker接收长轮询请求
3. Consumer接收broker响应
长轮询活动图:
一张图画不下,再来一张
- RocketMQ原理解析-consumer 3.长轮询
- RocketMQ原理解析-consumer 3.长轮询
- RocketMQ原理解析-consumer 3.长轮询
- RocketMQ原理解析-consumer 1.启动
- RocketMQ原理解析-consumer 7.shutdown
- RocketMQ原理解析-consumer 1.启动
- RocketMQ原理解析-consumer 7.shutdown
- RocketMQ原理解析-consumer 1.启动
- RocketMQ原理解析-consumer 7.shutdown
- RocketMQ原理解析-consumer 4.长轮询push消息—并发消费消息
- RocketMQ原理解析-consumer 4.长轮询push消息—并发消费消息
- RocketMQ原理解析-consumer 4.长轮询push消息—并发消费消息
- RocketMQ原理解析-consumer 2.消费端负载均衡
- RocketMQ原理解析-consumer 5.push消费-顺序消费消息
- RocketMQ原理解析-consumer 6.pull消息消费
- RocketMQ原理解析-consumer 2.消费端负载均衡
- RocketMQ原理解析-consumer 5.push消费-顺序消费消息
- RocketMQ原理解析-consumer 6.pull消息消费
- imei 获取
- 显示设置VGA frambuffer
- CENTOS/RHEL 7 系统中设置SYSTEMD SERVICE的ULIMIT资源限制
- Windows64位下各版本Python安装numpy,SciPy,matplotlib,Ipython模块
- 3D打印切片软件--cura的二次开发(2)(界面分析与汉化)(修改版增加图片)
- RocketMQ原理解析-consumer 3.长轮询
- h5移动端网页头部标签模板
- POLYV直播助手客户端软件做视频直播时如何添加画面源
- MFC的学习!
- JS闭包详析_懂不懂由你,反正我是懂了
- CRM加下拉框里面的值
- jQuery和AngularJS的区别浅析
- 开发商前缀那些事儿
- 剑指offer面试题44 扑克牌的顺子(java实现)