美文网首页
反模式使用dubbo 同时调用一个服务的多个节点

反模式使用dubbo 同时调用一个服务的多个节点

作者: 上重楼 | 来源:发表于2018-08-06 18:11 被阅读523次

    为啥会有这需求呢?是因为有一个功能,在管理页面添加修改的时候需要调用多节点部署的某服务的一个rpc接口。


    image.png

    那怎么做到这种蛋疼操作呢?

    第一步:

    实现com.alibaba.dubbo.rpc.cluster.LoadBalance
    操作一波传入的invokers(这就是所有的服务列表)
    我这里是从第二个节点开始调用一次,然后结尾返回第一个元素(返回的这个元素也会被调用)

    import com.alibaba.dubbo.common.URL;
    import com.alibaba.dubbo.rpc.Invocation;
    import com.alibaba.dubbo.rpc.Invoker;
    import com.alibaba.dubbo.rpc.RpcException;
    import com.alibaba.dubbo.rpc.cluster.LoadBalance;
    
    import java.util.List;
    
    /**
     * 所有节点都调用一次的负载均衡策略
     *
     * @author 周广
     **/
    public class AllExecLoadBalance implements LoadBalance {
    
    
        @Override
        public <T> Invoker<T> select(List<Invoker<T>> invokers, URL url, Invocation invocation) throws RpcException {
    
            if (invokers.size() > 1) {
                for (int i = 1; i < invokers.size(); i++) {
                    invokers.get(i).invoke(invocation);
                }
            }
            return invokers.get(0);
        }
    
    }
    

    第二步:

    在resources下添加文件夹META-INF,然后再添加文件夹dubbo然后添加文件:com.alibaba.dubbo.rpc.cluster.LoadBalance


    image.png

    添加内容:allExecLoadBalance=com.xxx.xxx.AllExecLoadBalance
    等号前面是key一般是用驼峰类名(一会用得上) 等号后面 我们自定义的复杂均衡类的全路径


    image.png

    第三步:

    在需要使用这神奇操作的类上面加上一个属性


    image.png

    就这样就搞定咯~ 可以开2个节点尝试一下~
    如果只有一个节点 是不会触发负载均衡策略的,在外层dubbo代码就直接选择返回了。 debug就进不去AllExecLoadBalance

    相关文章

      网友评论

          本文标题:反模式使用dubbo 同时调用一个服务的多个节点

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