Spring Cloud(Greenwich版)-05-Spring Cloud集成Ribbon(客戶端負載均衡組件)

Spring Cloud集成Ribbon

前言

前面完成了商品和用戶微服務的註冊發現,是基於點對點的微服務之間的調用,那麼在實際場景中微服務都是集羣部署的,調用關係如下圖所示:
調用關係.jpg

看到這裏大家會想到不就是負載均衡嘛!項目中經常用Nginx來解決圖中的服務集羣問題,那如果有1000+甚至10000+的服務呢?每增加一個服務要去Nginx裏面配置一下,然後重啓?額…想想都頭皮發麻!並且Nginx的負載均衡模式和本文將要講的是有區別的。

那麼本章將會用到Ribbon組件來解決上述問題。

Ribbon簡介及使用場景

Ribbon通俗來講就是一個負載均衡器,用來控制HTTP和TCP客戶端行爲,Ribbon從配置服務提供者列表庫(例如:Eureka、Zookeeper)去獲取服務配置信息,基於負載均衡算法計算出要請求的目標服務地址。

在Spring Cloud中Ribbon通常配合Eureka使用,Ribbon可以自動從Eureka Server獲取服務提供者地址列表,並基於負載均衡算法,選擇其中一個服務提供者實例。下圖展示了Ribbon與Eureka配合使用時的大致架構。
Ribbon配合Eureka

Spring Cloud集成Ribbon

第一步:複製商品和用戶微服務項目

複製項目microservice-consumer-goods,將pom.xml文件中ArtifactId內容修改爲 microservice-consumer-goods-ribbon 。如下圖所示:

複製商品微服務

複製項目microservice-provider-user,將pom.xml文件中ArtifactId 內容修改爲microservice-provider-user-ribbon。如下圖所示:

複製用戶微服務

備註:記得修改端口,不然啓動會出現端口衝突問題。

第二步:添加Ribbon依賴

由於 spring-cloud-starter-netflix-eureka-client 已經包含 spring-cloud-starter-netfilx-ribbon ,這一步可以省略。

第三步:在RestTemplate上增加@LoadBalanced註解支持
MicroserviceConsumerGoodsRibbonApplication.java
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
	return new RestTemplate();
};

對的,你沒看錯,到這裏就結束了!只需要添加LoadBalanced註解就可以讓RestTemplate整合Ribbon。

第四步: 修改調用用戶微服務
GoodsController.java
@GetMapping("/goods/{id}")
    public User findById(@PathVariable Long id){
        return this.restTemplate.getForObject("http://microservice-provider-user/simple/"+id,User.class);
 }

前面我們在調用用戶微服務的時候採用的是IP+端口+目標服務端點的方式,這裏將請求目標改爲http://{目標服務名稱}/{目標服務端點} 的形式。這樣的話Ribbon會自動在實際調用時,將目標服務名替換爲該服務的IP和端口

第五步:啓動測試
  • 啓動microservice-discovery-eureka
  • 啓動microservice-provider-user
  • 啓動microservice-provider-user-ribbon
  • 啓動microservice-consumer-goods-ribbon

微服務註冊情況

如上圖所示,2個用戶微服務和1個商品微服務都註冊到了Eureka Server,由於2個用戶微服務的名稱都是microservice-provider-user那麼會自動識別爲同一個集羣服務,也就是上面商品微服務調用用戶微服務的目標服務名稱。

訪問http://127.0.0.1:8091/goods/2
10次,會發現兩個用戶微服務示例都會打印日誌並且是每個被請求5次。

配套代碼

主代碼庫:https://github.com/yundianzixun/spring-cloud-study

商品微服務:https://github.com/yundianzixun/spring-cloud-study/tree/master/microservice-consumer-goods-ribbon

Eureka Server:https://github.com/yundianzixun/spring-cloud-study/tree/master/microservice-discovery-eureka

用戶微服務1:https://github.com/yundianzixun/spring-cloud-study/tree/master/microservice-provider-user

用戶微服務2:https://github.com/yundianzixun/spring-cloud-study/tree/master/microservice-provider-user-ribbon

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