自定义eureka负载均衡策略 ,ribbon,loadBalance

自定义eureka均衡负载策略 ,ribbon,loadBalance

鸡翅老哥视频写的自定义ribbon 负载均衡策略,模仿AbstractLoadBalancerRule子类RandomRule写的

  • 自定义Rule

import com.netflix.client.config.IClientConfig;
import com.netflix.loadbalancer.AbstractLoadBalancerRule;
import com.netflix.loadbalancer.ILoadBalancer;
import com.netflix.loadbalancer.Server;

import java.util.List;

/*
* 继承AbstractLoadBalancerRule自定义策略,选出端口号第一个大8888的server
* */
public class MyCustomRule extends AbstractLoadBalancerRule {
    public MyCustomRule() {
    }

    @Override
    public Server choose(Object key) {
        return choose(getLoadBalancer(), key);
    }

    @SuppressWarnings({"RCN_REDUNDANT_NULLCHECK_OF_NULL_VALUE"})
    public Server choose(ILoadBalancer lb, Object key) {
        if (lb == null) {
            return null;
        }
        Server server = null;
        while (server == null) {
            if (Thread.interrupted()) {
                return null;
            }
            List<Server> upList = lb.getReachableServers();
            List<Server> allList = lb.getAllServers();
            int serverCount = allList.size();
            if (serverCount == 0) {
                return null;
            }
            for(Server s:upList){
                if(s.getPort()>8888){
                    server=s;
                    break;
                }
            }
            if (server == null) {
                Thread.yield();
            } else {
                if (server.isAlive()) {
                    return server;
                }
                server = null;
                Thread.yield();
            }
        }
        System.out.println("host:"+server.getHost()+"port:"+server.getPort());
        return server;
    }

    @Override
    public void initWithNiwsConfig(IClientConfig iClientConfig) {

    }

}

  • config
import com.netflix.loadbalancer.IRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RuleConfig {

    @Bean
    public IRule myCustomRule(){
        return new MyCustomRule();
    }
}

  • @RibbonClient(name = “service-name”,configuration = RuleConfig.class)启动类添加该注解就可以使用了

但是现在用的都是loadBalance,直接用这个ribbon的用不了,因为依赖冲突,不过我们可以像这样自定义一个loadBalance,同样参考随机负载均衡RandomLoadBalancer,在org.springframework.cloud.loadbalancer.core包下,implements ReactorServiceInstanceLoadBalancer自定义功能就好了

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值