Spring Cloud Ribbon負載算法不生效解決方案

Spring Cloud Ribbon負載算法不生效解決方案


1、今天在學習Ribbon的時候,更改負載均衡算法不生效

更改配置類

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
 * DESCRIPTION TODO
 * Author  Administrator
 * Version 1.0
 **/
@Configuration
public class MyRole {

    @Bean
    public IRule iRule(){
        return  new RandomRule();
    }
}

主配置類

@SpringBootApplication
@EnableEurekaClient
@RibbonClient(name = "CLOUD-PAYMENT-SERVICE",configuration = MyRole.class)
public class OrderMain80 {
    public static void main(String[] args) {

        SpringApplication.run(OrderMain80.class,args);
    }
}

2、上面的設置一直不生效,一直是默認輪詢算法,然後我改了一下類名就正常生效了
更改完之後是RandomRule算法

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

/**
 * DESCRIPTION TODO
 * Author  Administrator
 * Version 1.0
 **/
@Configuration
public class CloudRole {

    @Bean
    public IRule iRule(){
        return  new RandomRule();
    }
}

3、注意事項
自己更改的算法類不能與主配置類在一個包裏
官方文檔明確給出了警告:
這個自定義配置類不能放在@ComponentScan所掃描的當前包下以及子包下,
否則我們自定義的這個配置類就會被所有的Ribbon客戶端所共享,也就是說
我們達不到特殊化定製的目的了。

4、負載均衡策略
內置類 描述

內置類 描述
RoundRobinRule 輪詢(就是一個地址訪問一次,換着來)
AvailabilityFilteringRule 對以下兩種服務器進行忽略:(1)在默認情況下,這臺服務器如果3次連接失敗,這臺服務器就會被設置爲“短路”狀態。短路狀態將持續30秒,如果再次連接失敗,短路的持續時間就會幾何級地增加。注意:可以通過修改配置loadbalancer…connectionFailureCountThreshold來修改連接失敗多少次之後被設置爲短路狀態。默認是3次。(2)併發數過高的服務器。如果一個服務器的併發連接數過高,配置了AvailabilityFilteringRule規則的客戶端也會將其忽略。併發連接數的上線,可以由客戶端的…ActiveConnectionsLimit屬性進行配置。
WeightedResponseTimeRule 爲每一個服務器賦予一個權重值。服務器響應時間越長,這個服務器的權重就越小。這個規則會隨機選擇服務器,這個權重值會影響服務器的選擇。
ZoneAvoidanceRule 以區域可用的服務器爲基礎進行服務器的選擇。使用Zone對服務器進行分類,這個Zone可以理解爲一個機房、一個機架等。
Retry 重試機制的選擇邏輯
BestAvailableRule 忽略哪些短路的服務器,並選擇併發數較低的服務器。
RandomRule 隨機選擇一個可用的服務器。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章