dubbo-loadbalance

1、生产组模拟多个服务,同时复制多个生产类及相关配置文件,每次启动生产类时,修改实现类,这样每次访问不同的服务打印的日志也不同

2、主要修改消费组实现负载均衡

@Component
public class ConsumerComponent {
    //loadbalance = "roundrobin"
    @Reference(loadbalance = "consistenthash")
    private HelloService helloService;

    public String sayHello(String name){
        return helloService.hello(name);
    }
}

3、除了以上提供的负载均衡策略,也可以自定义

      ① 新建 dubbo-spi-loadbalance 子模块

      ② 自定义负载均衡类,按照一定规范

public class OnlyFirstLoadBalancer implements LoadBalance {
    @Override
    public  Invoker select(List> list, URL url, Invocation invocation) throws RpcException {
        //所有的服务提供者 按照IP + 端口排序,选择第一个
        return list.stream().sorted((i1,i2)->{
            final int ipCompare = i1.getUrl().getIp().compareTo(i2.getUrl().getIp());
            if(ipCompare == 0){
                return Integer.compare(i1.getUrl().getPort(),i2.getUrl().getPort());
            }
            return ipCompare;
        }).findFirst().get();
    }
}

     ③ 在配置文件中注册该负载均衡类

      指定包名:META-INF/dubbo

      指定文件名:org.apache.dubbo.rpc.cluster.LoadBalance

onlyFirst=com.lagou.loadbalance.OnlyFirstLoadBalancer

      ④ 消费组定义负载均衡策略

@Component
public class ConsumerComponent {
    @Reference(loadbalance = "onlyFirst")
    private HelloService helloService;

    public String sayHello(String name){
        return helloService.hello(name);
    }
}

你可能感兴趣的:(Dubbo,dubbo,分布式)