Spring Cloud(Greenwich版)-05-Spring Cloud集成Ribbon(客

圖片

前言
java

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


圖片


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

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

Ribbon簡介及使用場景

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

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


圖片


Spring Cloud集成Ribbon

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

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

圖片

複製商品微服務負載均衡

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

圖片


備註:記得修改端口,否則啓動會出現端口衝突問題。微服務

第二步:添加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

相關文章
相關標籤/搜索