PushConsumer组件交互图
2020-08-03 12:50:28 0 举报
RocketMQ 消息存储和拉取的交互图
作者其他创作
大纲/内容
处理队列里的消息,处理完从队列移除
拉取到消息后,把消费请求ConsumeRequest提交给(喂给)对方执行
定期持久化ConsumeQueue
重新写入?
ConsumeRequest本身就是个Runnable,提交是直接提交给线程池
同时同步消费进度
从ConsumeQueue拉取消息给Consume
消费消息,更新消费进度
CommitLog,池子
没查到消息的请求会被挂起,择机重新拉取
DefaultMessageStore.ReputMessageService#doReput,定期把新数据同步到ConsumeQueue
消息处理队列,里面放的是若干条消息
消费失败就发回消息给Broker,发回失败就直接提交消费任务
Broker记录消费失败的消息
PullMessageService
RebalanceService
PullRequestHoldService
定时把消费队列重新负载均衡具体是1、循环订阅列表subscriptionInner2、对每个SubscriptionData拿对应Topic的消费队列(从topicSubscribeInfoTable)3、然后计算给当前消费者分配哪些队列,把计算结果mqSets同步到processQueueTable(增删)4、对于新出现的消息队列,提交消息拉取请求
消费进度管理器ConsumerOffsetManager
新出现的消费队列会提交拉取请求pullRequest过来给人家拉取消息
ProcessQueue
ConsumeQueue若干个
subscriptionInner里的SubscriptionData是用户配置的订阅配置topicSubscribeInfoTable是从nameSrv不断更新来的
ConsumeMessageService
DefaultMessageStore
拉取消息msgExt添加到队列
从 Broker 获取消费进度,同步消费进度到 Broke
OffsetStore
SendMessageProcessor#consumerSendMsgBack
RemoteBrokerOffsetStore
拉取消息
DefaultMessageStore.FlushConsumeQueueService
收藏
0 条评论
回复 删除
下一页