dubbo-loadbalance

文章介绍了如何在Dubbo中模拟多个服务,通过修改实现类达到访问不同服务的效果。其次,展示了如何调整消费组以实现负载均衡,如使用roundrobin或consistenthash策略。此外,文章详细讲解了如何自定义负载均衡器OnlyFirstLoadBalancer,通过比较服务提供者的IP和端口选择第一个,并在配置文件中注册该策略供消费组使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值