SpringCloud系列(3)---Netfilx-Ribbon

在上一篇筆記當中,已經成功使用了服務註冊和發現。但是所有微服務還是處於單點的狀態,我們也應該對微服務進行負載均衡,這是相當有必要的。SpringCloud 提供了Ribbon負載均衡器。它可以有助於控制HTTP和TCP客戶端的訪問行爲。爲Ribbon配置服務提供者地址後,Ribbon就可以基於負載均衡算法進行負載均衡。Ribbon默認提供了很多種負載均衡算法,輪詢、隨機等。Ribbon也可以使用自定義的負載均衡算法。

在SpringCloud中,當Ribbon於Eureka 配合使用時,Ribbon可以自動從Eureka Server 獲得服務提供者的地址列表,並基於特定的負載均衡算法,請求其中一個服務提供者。


一、整合Ribbon到微服務

如果你的微服務在MAVEN上已經整合了eureka,就不需要添加ribbon的依賴配置了。如果你想單獨使用ribbon你可以添加如下的maven依賴:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-ribbon</artifactId>
</dependency>

事實上非常簡單,我們只需要在RestTemplate的bean當中,添加@LoadBalanced annotation即可:

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

然後然後開始測試,我們需要啓動超過兩個用戶服務系統,從而觀察會選擇哪個節點。筆者已經啓動了兩個用戶服務節點


我們在商品服務系統的測試controller當中,添加如下代碼測試是否存在負載均衡:

@Autowired
private LoadBalancerClient loadBalancerClient;

@GetMapping("/testInstance")
public String testInstance() {
    ServiceInstance serviceInstance = this.loadBalancerClient.choose("tony-mall-provider-user");
    String hostAndPort = serviceInstance.getHost() + ":"
            + serviceInstance.getPort() + "[id:"
            + serviceInstance.getServiceId() + "]";
    return hostAndPort;
}
在幾次測試當中發現是輪詢的(只是估計):

192.168.28.100:8801[id:tony-mall-provider-user]

192.168.28.100:8801[id:tony-mall-provider-user]

在多次調用微服務的接口也是一樣,發現每次調用SQL的服務器都是不同的,從而發現已經實現了負載均衡。


二、Ribbon的配置

從Spring Cloud Netfilx 1.2.0開始 已經提供使用配置方式定義Ribbon:

配置前綴爲服務名稱,如用戶服務的名稱就爲:tony-mall-provider-user

例如:

tony-mall-provider-user.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule
事實上筆者目前的參考書上對配置部分講解還是相對模糊,後續筆者將會繼續參考其他書籍和官網文檔,將會基礎補充這一部分。

Ribbon可以脫離Eureka單獨使用,但是這裏我就不作演示了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章