mq补偿机制java代码_RocketMQ源码分析之消息消费机制-消费端消息负载均衡机制与重新分布 - Java 技术驿站-Java 技术驿站...

本文深入探讨RocketMQ的消息消费负载均衡,分析RebalanceService线程如何进行消息队列分配,以及消息消费进度的保存。讨论了在集群模式下,消费者如何根据算法获取消息队列,以及负载变化时的处理策略。着重讲解了非顺序消息的处理流程,包括PullRequest的生成和PullMessageService的角色。
摘要由CSDN通过智能技术生成

1、消息消费需要解决的问题

首先再次重复啰嗦一下RocketMQ消息消费的一些基本元素的关系

主题 ---》 消息队列(MessageQueue) 1 对多

主题 ----》 消息生产者,,,一般主题会由多个生产者组成,生产者组

主题 ---- 》 消息消费者,,一般一个主题也会被多个消费者消费

那消息消费至少需要解决如下问题:

1、一个消费组中多个消费者是如何对消息队列(1个主题多个消息队列)进

行负载消费的。

2、一个消费者中多个线程又是如何协作(并发)的消费分配给该消费者的

消息队列中的消息呢?

3、消息消费进度如何保存,包括MQ是如何知道消息是否正常被消费了。

4、RocketMQ 推拉模式实现机制

再提一个业界关于消费者与消息队列的消费规则

1个消费者可以消费多个消息队列,但一个消息队列同一时间只能被一个消费者消费,这又是如何实现的呢?

继续探讨消息分发与消费端负载均衡。

我们从上文知道,PullMessageService线程主要是负责pullRequestQueue中的PullResult,那问题来了,pullRequestQueue中的数据从哪来,在什么时候由谁来填充。

3008bd652835794df0b7ab587705a064.png

那我们就先沿着这条线索分析下去,看一下PullMessageService的pullReqestQueue添加元素的方法的调用链条如下:

969280705c070f67afa1c36b6dd321d0.png

也就是调用链:

RebalanceService. run()

MQClientInstance.doRebalance()

DefaultMQPulConsumerImpl.doRebalance()

RebalanceImpl.doRebalance()

RebalanceImpl.rebalanceByTopic

RebalanceImpl.updateProcessQueueTableInRebalance

RebalanceImpl.dispatchPullRequest

DefaultMQPushConsumerImpl.executePullRequestImmediately

PullMessageService.executePullRequestImmediately

从上面可以直观的看出,向PullMesssageService 的 LinkedBl

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值