Dubbo - 自定义负载均衡策略

前置条件

package provider;

import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.ProtocolConfig;
import com.alibaba.dubbo.config.RegistryConfig;
import com.alibaba.dubbo.config.ServiceConfig;
import service.GreetingService;
import service.impl.GreetingServiceImpl;

import java.io.IOException;

public class ApiProvider {
    public static void main(String[] args) throws IOException {
        //1.设置ServiceConfig实例
        ServiceConfig<GreetingService> serviceServiceConfig = new ServiceConfig<>();
        //2.设置应用程序配置
        serviceServiceConfig.setApplication(new ApplicationConfig("first-dubbo-provider"));
        //3.设置注册中心
        RegistryConfig registryConfig = new RegistryConfig("zookeeper://81.68.187.197:30002");

        serviceServiceConfig.setRegistry(registryConfig);
        //4.设置接口以及实现类
        serviceServiceConfig.setInterface(GreetingService.class);
        serviceServiceConfig.setRef(new GreetingServiceImpl());
        serviceServiceConfig.setProtocol(new ProtocolConfig("dubbo",-1)); //随机端口,因为idea可以开启并行执行代码
        //5.设置分组与版本
        serviceServiceConfig.setVersion("1.0.0");
        serviceServiceConfig.setGroup("dubbo");
        serviceServiceConfig.setTimeout(50000);
        //分别有 random, leastactive, consistenthash, roundrobin
        serviceServiceConfig.setLoadbalance("random");
        //6.设置线程池策略
        //HashMap<String, String> parameters = new HashMap<>();
        //parameters.put("threadpool","mythreadpool");
        //serviceServiceConfig.setParameters(parameters);
//        AsyncContext
        //7.导出
        serviceServiceConfig.export();
        System.out.println("success");
        System.in.read();
    }
}


public class ApiConsumer {
    public static void main(String[] args) {
        //9.创建服务引用对象实例
        ReferenceConfig<GreetingService> referenceConfig = new ReferenceConfig<>();
        //10.设置应用程序信息
        referenceConfig.setApplication(new ApplicationConfig("first-dubbo-consumer"));
        //11.设置服务注册中心
        referenceConfig.setRegistry(new RegistryConfig("zookeeper://81.68.187.197:30002"));
        //12.设置服务接口和超时时间
        referenceConfig.setInterface(GreetingService.class);
        referenceConfig.setTimeout(5000);
        //13.设置自定义负载均衡策略与集群容错策略
        //14.设置版本和分组
        referenceConfig.setVersion("1.0.0");
        referenceConfig.setGroup("dubbo");
        //此处设置负载均衡策略 

        //15.引用服务
        GreetingService greetingService = referenceConfig.get();
        //16.设置隐式参数
        RpcContext.getContext().setAttachment("company", "liyuan company");
        System.out.println(greetingService.sayHello("liyuan"));
    }

//注意若仅有一个服务提供者,那就不会调用负载均衡,因此须有多个服务提供者才行
在这里插入图片描述

//若消费端以及提供端均设置了负载均衡,以消费端为准;

负载均衡策略效果
random随机
roundrobin轮询通过变换提供方权重实现
leastactive最少活跃数过滤出所有调用次数等于最小调用次数的服务提供者
consistenthash一致性哈希环寻找环上顺时针第一个最大的值

1. 实现LoadBalance策略

package configuration;

import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.rpc.Invocation;
import com.alibaba.dubbo.rpc.Invoker;
import com.alibaba.dubbo.rpc.cluster.loadbalance.AbstractLoadBalance;

import java.util.List;

public class MyLoadBalance extends AbstractLoadBalance {

    private static int count = 0;

    @Override
    protected <T> Invoker<T> doSelect(List<Invoker<T>> invokers, URL url, Invocation invocation) {
        return invokers.get(count++ % invokers.size());
    }
}

2.

在这里插入图片描述
在这里插入图片描述

3.

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值