介绍之前首先抛出几个问题:1. 要做负载均衡,首先要解决的一个问题是什么?信号收集分为Client端信号收集与Broker端信号收集两个部分。在DefaultMQPushConsumerImpl.start()时,会将消费者的topic订阅关系设置到rebalanceImpl的SubscriptionInner的map中用于负载:FilterAPI.buildSubscriptionData接口将订阅关系转换为SubscriptionData 数据,其中subString包含订阅tag等信息。另外,如果该消费者的消费模式为集群消费,则会将retry的topic一并放到。Client继续收集信息:本文以DefaultMQPushConsumerImpl为例,因此this对象类型为DefaultMQPushConsumerImp。this.rebalanceService是一个RebalanceService实例对象,它继承与ServiceThread,是一个线程类。rebalanceImpl.doRebalance()过程如下:rebalanceByTopic方法中根据消费者的消费类型为BROADCASTING或CLUSTERING做不同的逻辑处理。集群消费负载均衡逻辑主要代码如下:注:BROADCASTING逻辑只包含上述的1、6。当前消费对进行负载均衡策略后获取对应的消息消费队列。
暂无评论