美文网首页dubbo
Dubbo自定义负载均衡策略

Dubbo自定义负载均衡策略

作者: pq217 | 来源:发表于2022-07-27 19:08 被阅读0次

    环境

    spring-boot 2.3.2.RELEASE

    dubbo 2.7.8

    负载均衡策略

    dubbo内置五种负载均衡策略:

    • Random 随机(默认)
    • RoundRobin 轮询
    • LeastActive 最小活跃订阅数
    • ConsistentHash 一致性hash
    • ShortestResponse 最短响应时间(不知道为啥官网没有文档)
    yml配置

    在客户端yml可以如下全局配置负载均衡策略

    dubbo:
      consumer:
        loadbalance: RoundRobin ## 使用轮询
    
    注解配置

    也可以在引用时配置某个服务的负载均衡策略

    @DubboReference(loadbalance = "LeastActive")
    

    自定义策略

    也可以自己实现一个负载均衡策略,dubbo是支持SPI扩展的

    比如我遇到的场景: 多人开发同一个项目,dubbo注册器共用一个nacos服务,会导致rpc请求发送到别人的电脑上,这个时候需要一个"优先访问本地服务"的负载均衡策略

    第一步,实现一个LoadBalance
    @Slf4j
    public class LocalFirstLoadBalance extends AbstractLoadBalance {
    
        public static final String NAME = "localfirst";
    
        @Override
        protected <T> Invoker<T> doSelect(List<Invoker<T>> invokers, URL url, Invocation invocation) {
            try {
                InetAddress addr = InetAddress.getLocalHost();
                // 筛选相同ip的Invoker
                Optional<Invoker<T>> self = invokers.stream().filter(v -> v.getUrl().getHost().equals(addr.getHostAddress())).findFirst();
                if (!self.isPresent()) {
                    throw new Exception("no local provider");
                }
                return self.get();
            } catch (Exception e) {
                log.error("本地负载出错: {}", e.getMessage());
                return invokers.get(0);
            }
        }
    }
    
    第二步,resources目录下新建META-INF.dubbo文件夹
    META-INF.dubbo
    第三步,在META-INF.dubbo下新建org.apache.dubbo.rpc.cluster.LoadBalance文件
    org.apache.dubbo.rpc.cluster.LoadBalance

    给自己的自定义负载均衡器起个名字, 比如LocalFirst,编辑文件内容如下

    LocalFirst=com.xxx.xxx.LocalFirstLoadBalance
    

    格式为名称=包名.类名

    最后,配置使用自定义负载均衡策略
    dubbo:
      consumer:
        loadbalance: LocalFirst ## 使用LocalFirst负载均衡策略
    

    写这篇文章的主要是目的为了研究Dubbo的SPI机制,留在下一篇介绍

    相关文章

      网友评论

        本文标题:Dubbo自定义负载均衡策略

        本文链接:https://www.haomeiwen.com/subject/uzrzirtx.html