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 | 隨機選擇一個可用的服務器。 |