fix(sj_1.1.0): 优化负载均衡异常问题

This commit is contained in:
opensnail 2024-06-13 17:12:36 +08:00
parent ae31c5ef87
commit 7894cfb284

View File

@ -1,6 +1,9 @@
package com.aizuda.snailjob.server.common.allocate.server; package com.aizuda.snailjob.server.common.allocate.server;
import cn.hutool.core.collection.CollUtil;
import com.aizuda.snailjob.common.log.SnailJobLog;
import com.aizuda.snailjob.server.common.ServerLoadBalance; import com.aizuda.snailjob.server.common.ServerLoadBalance;
import com.google.common.collect.Lists;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -17,10 +20,18 @@ public class AllocateMessageQueueAveragely implements ServerLoadBalance<Integer,
@Override @Override
public List<Integer> allocate(String currentCID, List<Integer> bucketList, List<String> serverList) { public List<Integer> allocate(String currentCID, List<Integer> bucketList, List<String> serverList) {
if (CollUtil.isEmpty(serverList)) {
return Lists.newArrayList();
}
List<Integer> consumerBucket = new ArrayList<>(); List<Integer> consumerBucket = new ArrayList<>();
// 找到当前消费者在消费者队列里面的下标 // 找到当前消费者在消费者队列里面的下标
int index = serverList.indexOf(currentCID); int index = serverList.indexOf(currentCID);
if (index < 0) {
SnailJobLog.LOCAL.warn("currentCID: [{}] not in serverList:[{}]", currentCID, serverList);
return Lists.newArrayList();
}
// 此处取余是为了判断队列与总消费者数的是否是整数倍 mod=0则是整数倍否则不是 // 此处取余是为了判断队列与总消费者数的是否是整数倍 mod=0则是整数倍否则不是
int mod = bucketList.size() % serverList.size(); int mod = bucketList.size() % serverList.size();