Java Spring Cloud Ribbon

Spring Cloud -- Ribbon負載均衡

黃翰暉 Jacob Huang 2021/07/20 10:00:00
33

前言

      接下來接續上一篇 "Spring Cloud -- Ribbon負載均衡(初步配置)" ,我們要討論的是如何實現Ribbon負載均衡的功能,程式的部份將延續前一篇文章,還沒有看過的可以先去看看喔~

 

Ribbon負載均衡

      Ribbon在工作時會分成兩個步驟:
1. 優先選擇在同一個區域內的EurekaServer中負載較少的Server
2. 根據用戶指定的策略,在從Server中取到的服務註冊列表中選擇一個地址

 

      而為了模擬出讓可以讓客戶端負載均衡的demo,我們需要再增加兩個服務端微服務 8002、8003,如下:

再來我們開始依序建置:

1. 將8001的pom.xml的 <dependencies> 整段複製過去到8002、8003的pom.xml。

2. 將8001的程式部份copy至8002、8003,主啟動類名稱記得修改。

3. 將8001的resources copy至8002、8003,application.yml的server.port部份記得修改,修改完後我們已經有了三個服務端Server了,配置如下:

4. 還記得之前有提過,微服務提供單個業務功能服務,一個服務做一件事,能夠自行單獨啟動或銷毀,並擁有自己的資料庫。因此,我們要再建立8002、8003各自的DB,如下,clouddb03也是相同的:

5. 修改8002、8003的application.yml,如下:

6. 啟動3個Eureka集群。

7. 啟動3個服務端並各自測試 -> http://localhost:8002/dept/list,結果如下:

8. 將客戶端 80 啟動(此時,我們已經啟動了7個微服務,還是提醒大家memory加好加滿,記憶體不夠大的真的會爆炸喔)。

9. 此時,神奇的事要發生了~我們經由客戶端來訪問 http://localhost/consumer/dept/list ,第一次可以看見我們撈取的資料為clouddb01的data:

讓我們按下重新整理後,這個動作等於是第二次的訪問,我們可以看到第二次撈取的資料為clouddb02的data:

第三次:

一直不斷的重複,可以發現他會自動的在三個Server端有順序的切換,意味著我們在 80 的 ConfigBean.java 中所設置的 @LoadBalanced 他預設的負載均衡方式為輪詢的方式,我們成功的完成了Ribbon結合Eureka實現了負載均衡的實例,有沒有很興奮~~

好,沒有很興奮。

 

      以上,為我們實作的Ribbon結合Eureka實現了在客戶端的負載均衡功能,若其中有疏漏,也歡迎各位前輩不吝指教,謝謝大家~

 

參考文獻

Spring Cloud負載均衡神器——Ribbon簡介與基本使用

尚硅谷Spring Cloud教程

黃翰暉 Jacob Huang