【SpringCloud】SpringCloud(二)之Ribbon

James-Black發表於2020-11-22

目錄

前言

一、Ribbon是什麼?

二、Ribbon的使用

1.啟動兩個服務

2.開啟負載均衡

3.負載均衡流程圖



前言

        在實際的開發環境中,我們往往會開啟多個生產者的叢集,此時我們獲取的服務列表中就會有多個,那麼我們需要訪問哪一個呢?這時候我們需要編寫負載均衡演算法,在多個例項列表中進行選擇,但是Eureka中已經整合了負載均衡元件:Ribbon。那麼就來了解一下Ribbon吧


一、Ribbon是什麼?

        Ribbon是Netflix釋出的負載均衡器,有助於控制http和TCP客戶端的行為,為Ribbon配置服務提供者地址列表後,Ribbon就可基於某種負載均衡演算法,自動的幫助服務消費者去請求.Ribbon預設為我們提供很多的負載均衡演算法.例如:輪詢、隨機等,當然,我們也可為Ribbon實現自動以的負載均衡演算法。

二、Ribbon的使用

以下內容在Eureka程式碼的基礎上:參考連結

1.啟動兩個服務

        可以利用我們開啟EurekaServer叢集的方式來啟動.詳細請參考

                                                         

        啟動之後,開啟Eureka監控皮膚,可以發現,有兩個USER-SERVICE.

2.開啟負載均衡

         由於Eureka中已經繼承了Ribbon,所以我們無需引入新的依賴,直接在RestTemplate的方法上面新增@LoadBalanced註解.

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

        其次修改消費者的呼叫方式,不在手動獲取ip和埠,直接通過服務名稱呼叫

@GetMapping("{id}")
public User queryById(@PathVariable("id") Long id){
    String url = "http://user-service/user/" + id;
    User user = restTemplate.getForObject(url, User.class);
    return user;
}

      我們通過原始碼的跟蹤可以發現,Ribbon的負載均衡是利用輪詢的方式實現的,當然了我們可以修改負載均衡的規則,此時我們需要修改消費者的微服務上的配置(application.yml):

user-service:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

格式是:{服務名稱}.ribbon.NFLoadBalancerRuleClassName,值就是IRule的實現類。

        Ribbon預設採用的懶載入方式,即第一次訪問時才會去建立負載均衡客戶端,往往會出現超時的情況,如果需要採用飢餓載入的方式,可以使用以下方式修改消費者的微服務上的配置(application.yml):

ribbon:
  eager-load:
    enabled: true
    clients: user-service

 

 

3.負載均衡流程圖

​​​​​​​                                                                                   

相關文章