使用Dubbo的SPI扩展机制实现自定义LoadBalance——方法二 不改源码添加META-INF/dubbo元数据

一.官网提供的方法

参考官网

http://dubbo.apache.org/zh-cn/docs/dev/impls/load-balance.html

二.方法总结

在工程中创建类并实现LoadBalance接口

public class SimpleLoadBalance implements LoadBalance {
    public <T> Invoker<T> select(List<Invoker<T>> invokers, URL url, Invocation invocation) throws RpcException {
        return invokers.get(invokers.size()-1);
    }
}

在resources中构建如下目录结构

在com.alibaba.dubbo.rpc.cluster.LoadBalance文件中配置如下内容,simpleloadbalance就是该负载均衡的名字。

simpleloadbalance=com.xxx.testdubbo.loadbalance.SimpleLoadBalance

最终的目录结构

三.踩过得一些坑

Dubbo使用的是2.5.10,版本比较老,所以在loadFile时使用的是com.alibaba.xxxx,而官网给的是org.apache.dubbo.xxxx,导致加载不到扩展类。

所以更改META-INF/dubbo/org.apache.dubbo.rpc.cluster.LoadBalance文件名为META-INF/dubbo/com.alibaba.dubbo.rpc.cluster.LoadBalance

在使用maven打包时,默认不会把META-INF文件夹编译到classpath中,加上<resource>把resources/下所有文件都输出到classpath

四.运行调试

 参考 https://www.cnblogs.com/Sicwen/p/10573617.html

原文地址:https://www.cnblogs.com/Sicwen/p/10573099.html