七、负载均衡-Ribbon 如何对负载均衡策略进行扩展

当内置的负载均衡策略不满足业务需求的时候,我们就需要自定义 Ribbon 的负载策略。
一、 继承 AbstractLoadBalancerRule 类

package com.comsys.configuration;

import java.util.List;

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

public class RoncooCustomRule extends AbstractLoadBalancerRule {
    private 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(); // 可用的服务实例 

            // 只获取端口为:7779 的服务实例 
            for (Server s : upList) { 
                if (s.getPort() == 7777) { 
                    server = s; 
                } 
            } 

            if (server == null) { 
                Thread.yield(); 
                continue; 
            } 

            System.out.println("实例 IP:" + server.getHost() + " 端口:" + 
            server.getPort()); 

            if (server.isAlive()) { 
                return (server); 
            } 

            server = null; 
            Thread.yield(); 
        } 

        return server; 
    }

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

    @Override
    public void initWithNiwsConfig(IClientConfig arg0) {
    }

}

二、 配置策略

# 通过配置文件 
spring-cloud-provider.ribbon.NFLoadBalancerRuleClassName=com.roncoo.education.configuration.RoncooCustomRule
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值