spring boot 負載均衡Ribbon


git地址
https://github.com/a18792721831/studySpringCloud.git

1. RestTemplate簡介

RestTemplate 是 Spring Resources 中一個訪問第三方RESTful API 接口的網絡請求框架。RestTemplate 的設計原則和其他 Spring Template(例如JdbcTemplate、JmsTemplate)類似,都是爲執行復雜任務提供了一個具有默認行爲的簡單方法。
RestTemplate 是用來消費 REST 服務的,所以 RestTemplate 的主要方法都與REST的 Http協議的一些方法緊密相連,例如 HEAD、GET、POST、PUT、DELETE和 OPTIONS 等方法,這些方法在 RestTemplate 類對應的方法爲 headForHeaders()、getForObject()、postForObject()、put()和delete()等。
我們在寫測試方法時用到的TestRestTemplate
在這裏插入圖片描述
就是用RestTemplate實現的
在這裏插入圖片描述

2. Ribbon簡介

負載均衡是指將負載分攤到多個執行單元上,常見的負載均衡有兩種方式。一種是獨立進程單元,通過負載均衡策略,將請求轉發到不同的執行單元上,例如Ngnix。另一種是將負載均衡邏輯以代碼的形式封裝到服務消費者的客戶端上,服務消費者客戶端維護了一份服務提供者的信息列表,有了信息列表,通過負載均衡策略將請求分攤給多個服務提供者,從而達到負載均衡的目的。
Ribbon是 Netflix 公司開源的一個負載均衡的組件,它屬於上述的第二種方式,是將負載均衡邏輯封裝在客戶端中,並且運行在客戶端的進程裏。Ribbon是一個經過了雲端測試的IPC庫,可以很好地控制HTTP和TCP客戶端的負載均衡行爲。
在Spring Cloud 構建的微服務系統中,Ribbon作爲服務消費者的負載均衡器,有兩種使用方式,一種是和RestTemplate相結合,另一種是和 Feign相結合。
Ribbon有很多子模塊,但很多模塊沒有用於生產環境,目前Netilix 公司用於生產環境的Ribbon子模塊如下。

  • ribbon-loadbalancer:可以獨立使用或與其他模塊一起使用的負載均衡器API。
  • ribbon-cureka:Ribbon 結合 Eureka 客戶端的API,爲負載均衡器提供動態服務註冊列
    表信息。
  • ribbon-core:Ribbon的核心API。
    在這裏插入圖片描述
    不知是否還有人維護?
    積累了140多個issues沒人處理
    在這裏插入圖片描述
    在這裏插入圖片描述

3. 實例–使用RestTemplate和Ribbon消費服務

3.1 啓動eureka server

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

3.2 多實例啓動eureka client

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

3.3 驗證eureka

在這裏插入圖片描述
在這裏插入圖片描述

3.4 創建 Ribbon模塊

在這裏插入圖片描述
在這裏插入圖片描述
項目結構
在這裏插入圖片描述

3.5 配置

在這裏插入圖片描述

3.6 創建Ribbon Config類

只需要在程序的IoC容器中注入一個restTemplate的Bean,並在這個Bean上加上@LoadBalanced註解,此時RestTemplate就結合Ribbon開啓了負載均衡。(爲什麼?負載均衡策略有哪些?存疑)
在這裏插入圖片描述

3.7 創建service

在這裏插入圖片描述

3.8 service test

在這裏插入圖片描述
結果
在這裏插入圖片描述
默認是輪詢策略。

3.9 創建controller

在這裏插入圖片描述

3.10 controller test

在這裏插入圖片描述
結果
在這裏插入圖片描述

3.11 啓動

在這裏插入圖片描述
訪問
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

4. LoadBalancerClent

負載均衡器的核心類爲LoadBalancerClient,它可以獲取負載均衡的服務提供者的實例信息。
我們上述的項目基礎上,在創建一個模塊。
在這裏插入圖片描述
如下配置
在這裏插入圖片描述
寫一個controller
在這裏插入圖片描述
打上斷點,調試啓動。
不要忘記這裏:
在這裏插入圖片描述
在這裏插入圖片描述
查看choose方法
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
這裏getserver,打上斷點,繼續。
首先看getLoadBalancer
進入打斷點
在這裏插入圖片描述
接下來
getLoadBalancer
在這裏插入圖片描述
在這裏插入圖片描述
通過反射,獲取IClientConfig.
接下來是
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
loadBalancer有什麼?
在這裏插入圖片描述
在這裏插入圖片描述
從上述圖片看出,本次請求應該是8764
在這裏插入圖片描述
看下allServers
在這裏插入圖片描述
是個接口,其實現有
在這裏插入圖片描述
有四個實現類,本次使用從調試信息看是使用第二個實現類。猜測這裏應該是不同的策略。

5. 本地serverList

在4的基礎上進行修改:
設置不連接eureka server
且定義stores,這個stores就是我們之前的eureka-client 的url
在這裏插入圖片描述
接着修改controller
在這裏插入圖片描述
然後運行:
在這裏插入圖片描述
在這裏插入圖片描述
這裏的list就是我們配置的本地的list

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