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 <T> Invoker<T> select(List<Invoker<T>> 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);
}
}