RocketMQ Consumer 负载均衡算法学习 -- AllocateMessageQueueAveragelyByCircle

首先, RocketMQ Consumer 的负载均衡指的是把Topic 下的所有MessageQueue 分配到不同的 Consumer 中,所以Message Queue , Consumer 的数量,某个Consumer 的位置 会影响到负载均衡。

这边介绍下环形平均分配的算法:所有Consumers 形成一个环,所有MessageQueues 依次分配到环上每个Consumer。 代码如下,注释有解释:

/**
	  环形平均分配: 所有Consumers 形成一个环,所有MessageQueues 依次分配到环上每个Consumer。 环形平均分配
 */
public class MyAllocateMessageQueueAveragelyByCircle implements AllocateMessageQueueStrategy {
@Override
public List<MessageQueue> allocate(String consumerGroup, String currentCID, List<MessageQueue> mqAll, List<String> cidAll) {
    // 这里省略校验部分,重点关注算法

    List<MessageQueue> result = new ArrayList<>();
    int index = cidAll.indexOf(currentCID);  // 当前consumer 的下标
    for (int i = index; i < mqAll.size(); i++) {
        if (i % mqAll.size() == index) {   // 下标为i 的MessageQueue 分别给 下标为i 的 consumer.
            result.add(mqAll.get(i));
        }
    }
    return result;
}

@Override
public String getName() {
    return null;
}

}

猜你喜欢

转载自blog.csdn.net/ZHANGYONGHAO604/article/details/82250726