package org.dromara.common.loadbalance.core; import cn.hutool.core.net.NetUtil; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.common.URL; import org.apache.dubbo.rpc.Invocation; import org.apache.dubbo.rpc.Invoker; import org.apache.dubbo.rpc.cluster.loadbalance.AbstractLoadBalance; import java.util.List; import java.util.concurrent.ThreadLocalRandom; /** * 自定义 Dubbo 负载均衡算法 * * @author Lion Li */ @Slf4j public class CustomDubboLoadBalancer extends AbstractLoadBalance { @Override protected Invoker doSelect(List> invokers, URL url, Invocation invocation) { for (Invoker invoker : invokers) { if (NetUtil.localIpv4s().contains(invoker.getUrl().getHost())) { return invoker; } } return invokers.get(ThreadLocalRandom.current().nextInt(invokers.size())); } }