1. 程式人生 > 其它 >使用Ribbon做Spring Cloud Alibaba負載均衡

使用Ribbon做Spring Cloud Alibaba負載均衡

使用Ribbon做負載均衡

概念

Ribbon不需要cloud-Alibaba的元件 但是預設也會被匯入進去 預設採用輪詢優化負載均衡 使用方式也很簡單

簡單使用

在之前的RestTemplte配置加上註解@LoadBalanced即可匯入ribbon

@Configuration
public class ConsumerConfig {
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

有了ribbon後我們呼叫服務就非常簡單了

    @GetMapping("/getPort")
    public String getPort(){
       return this.restTemplate.getForObject("http://provider/getPort",String.class);
    }

測試時會發現8081 8082兩個服務會輪流被使用 即輪詢演算法

配置ribbon使用其他的演算法

隨機演算法

在yml加上配置程式碼即可

provider:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

基於權重的演算法

編寫配置檔案

provider:
  ribbon:
    NFLoadBalancerRuleClassName: com.jie.config.NacosWeightedRul

實現對應類

@Slf4j
public class NacosWeightedRul extends AbstractLoadBalancerRule {
    @Autowired
    private NacosDiscoveryProperties nacosDiscoveryProperties;
    @Override
    public void initWithNiwsConfig(IClientConfig iClientConfig) {
        //讀取配置檔案
    }

    @Override
    public Server choose(Object o) {
        ILoadBalancer loadBalancer = this.getLoadBalancer();
        BaseLoadBalancer baseLoadBalancer = (BaseLoadBalancer) loadBalancer;
        //獲取微服務名稱
        String name = baseLoadBalancer.getName();
        //獲取服務發現相關的API
        NamingService namingService = nacosDiscoveryProperties.namingServiceInstance();
        try {
            Instance instance = namingService.selectOneHealthyInstance(name);
            log.info("選擇的例項是port={},instance={}",instance.getPort(),instance);
            return new NacosServer(instance);

        } catch (NacosException e){
            return null;
        }
    }
}

在nacos我們吧8082服務權重加大

測試使用可以發現基本大部分都是在使用8082服務