前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RocketMQ客户端PUSH消费--并发消费与顺序消费【源码笔记】

RocketMQ客户端PUSH消费--并发消费与顺序消费【源码笔记】

作者头像
瓜农老梁
发布2019-08-05 14:41:21
2.8K1
发布2019-08-05 14:41:21
举报
文章被收录于专栏:瓜农老梁瓜农老梁
目录
代码语言:javascript
复制
一、消息拉取与处理
1.消息拉取
2.消息处理
二、并发消费
1.ConsumeMessageConcurrentlyService职责
三、顺序消费流程
1.ConsumeMessageOrderlyService职责
2.Broker端队列加锁流程
四、交互示意图
五、源码清单
一、消息拉取与处理
1.消息拉取

小结:PullMessageService处理拉取消息请求。通过组织RequetHeader需要包含从哪里开始拉取(ConsumerGroup、Topic,Queue,queueOffset)等信息,向Broker发起请求,取回消息后对消息进行处理。当该Queue的消息数量超过1000,或者最小与最大偏移量之间的差距超过默认2000也会触发限流,即:延迟50毫秒放入请求队列。也可以通过挂起消费线程来延迟(1秒)消息拉取,从而达到消费限流作用。

2.消息处理

小结:PullMessageService处理消息部分流程:将消息提交给了processQueue红黑树缓存;同时将消息提交给consumeMessageService来处理具体的消息内容。

二、并发消费流程
1.ConsumeMessageConcurrentlyService职责

小结:ConsumeMessageService并发消费(ConsumeMessageConcurrentlyService)主要工作交给Listener(客户端传入)进行处理,并对处理结果进行统计和处理;对于失败消息,广播消费会丢弃,集群消费会发回Broker重新消费;清理ProcessQueue并更新缓存(offsetTable)消费进度。

三、顺序消费流程
1.ConsumeMessageOrderlyService职责

小结:顺序消费流程跟并发消费最大的区别在于,对要处理的队列加锁,确保同一队列,同一时间,只允许一个消费线程处理。

代码语言:javascript
复制
1.为什么顺序消费时需要对Broker发请求对要处理的队列加锁?
2.对Broker端队列加锁流程是怎么样的?
3.既然加锁了需要解锁吗?
4.会存在Broker加锁过期了客户端还在处理该队列的情况吗?
代码语言:javascript
复制
2.Broker端队列加锁流程

小结:顺序消费时对Broker端队列加锁防止该队列在特定时间内(一次默认60秒)被分配给其他clientId处理;Broker端加锁了,一次加锁失效时长为60秒;不存在Broker加锁过期了客户端还在处理该队列的情况,Broker加锁时长为60秒,而客户端加锁时长为30秒,当客户端加锁时长失效时会重新请求Broker加锁并更新时间戳,从而可以持续延长加锁时间。

四、交互示意图

五、源码清单

代码语言:javascript
复制
1.PullMessageService.java
2.ConsumeMessageConcurrentlyService.java
3.ConsumeMessageOrderlyService.java
4.RebalanceLockManager.java
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 瓜农老梁 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • 一、消息拉取与处理
    • 1.消息拉取
      • 2.消息处理
      • 二、并发消费流程
        • 1.ConsumeMessageConcurrentlyService职责
          • 三、顺序消费流程
            • 1.ConsumeMessageOrderlyService职责
              • 2.Broker端队列加锁流程
              • 四、交互示意图
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档