Ribbon負載均衡的使用與切換算法


作用

  客戶端的負載均衡,與RestTemplate結合使用

 

1:pom

  eureka的客戶端與nocos的客戶端pom依賴,都集成了ribbon,所以不再需要重復添加依賴

2:將RestTemplate注入到spring容i中

@Component
@Configuration
public class AppConfiguration {
    
    @LoadBalanced // 負載均衡
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

   @LoadBalanced // 負載均衡  該注解標記使用負載均衡,不標記則會導致:客戶端發現服務實例有多個,不知道調用哪一個的問題(默認使用輪詢算法)

 

3:RestTemplate的使用

    @Autowired
    private RestTemplate restTemplate;

    private String url = "http://CLOUD-PAYMENT-SERVICE";  //正式環境從配置文件中讀取


    @RequestMapping("/get/{id}")
    public BaseResult findById(@PathVariable("id") Integer id) {
        ResponseEntity<BaseResult> forEntity = restTemplate.getForEntity(url + "/payment/get/" + id, BaseResult.class);
        BaseResult body = forEntity.getBody();
        return body;
    }

 

4:替換負載規則

  4.1 負載均衡的策略

ribbon
    負載均衡
    步驟:
        第一步:選擇eurekaServer,他優先選擇在同一區域內負載較少的server
        第二步:根據用戶指定的策略,從server取到的服務注冊列表中選擇一個地址
    策略Irule:
        RoundRobinRule
            輪詢
        WeighedResponseTimeRule
            響應速度快的實例選擇權重大
        RandomRule
            隨機
        RetryRule
            先按照RoundRobinRule策略獲取,失敗后會重試(重試試還是找本次獲取的實例,還是找另一個??)
        BestAvailableRule
            過濾掉多次訪問而處於短路器跳閘狀態的服務,然后選擇一個並發小的
        ZoneAvoidanceRule
            默認規則,符合判斷server所在域的性能和server的可用性選擇服務器
        根據響應時間加權

    替換負載規則

 備注:自定義rebion不應該放到@ComponentScan下,否則會被所有的客戶端共享,springBootApplication注解,默認帶上@ComponentScan下 
      備注:eureka-client依賴,默認集成了ribbon

  4.2 自定義負載均衡

@Configuration
public class CloudRondowRule {

    @Bean
    public IRule iRule() {
        return new RandomRule();  //隨機的規則
    }
}

main方法在springcloud包下,CloudRondowRule規則的定義在myRule包下,這樣就不會掃描到了CloudRondowRule

 

5:標記客戶端使用定義的負載均衡的切換規則

 

@EnableEurekaClient
@SpringBootApplication
@RibbonClient(name = "CLOUD-PAYMENT-SERVICE", configuration = CloudRondowRule.class)  
public class OrderMain80 {

    public static void main(String[] args) {
        SpringApplication.run(OrderMain80.class);
    }
}

 

 

 

6:調用客戶端的接口測試

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM