之前說過GateWay是一個zuul的路由替代品,但GateWay也可以實現負載均衡的能力,與ribbon不一樣,他通過服務註冊中心的服務名/接口實現負載均衡的能力
我們把之前的代碼複製一下,項目結構如下
我們需要用的是,eureka服務註冊中心,gateway路由,普通項目f1,普通項目f2
如果你還不會搭建服務註冊中心可以點擊這裏:eureka服務註冊中心
如果你還不會搭建路由可以點擊這裏:gateway路由
使用非常簡單,我們只要修改一下gateway的配置文件,如下所示
spring.application.name
:服務名
spring.cloud.gateway.discovery.locator.enabled
:開啓 Gateway
的註冊中心發現配置,開啓後可自動從服務註冊中心拉取服務列表,通過各個服務的 spring.application.name
作爲前綴進行轉發,該配置默認爲 false
。
eureka.client.service-url.defaultZone
:配置 EurekaServer
默認的空間地址,uname:pwd是springSecurity的賬號和密碼,
如果不懂可以點擊這裏:Spring Security安全框架
修改pom文件,添加註冊發現依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
修改Gateway啓動文件,增加客戶端註冊發現註解
@EnableDiscoveryClient,代碼如下所示
我們分別啓動一下eureka服務註冊中心,gateway路由,普通項目f1,普通項目f2
在之前我們的f1項目與f2項目都有一個接口叫test,用來區分兩個項目
我們可以分別訪問一下看看
這個時候我們訪問我們的Gateway路由,上面我們說過,Gateway的負載均衡規則是
通過服務註冊中心的服務名/接口實現負載均衡的能力
我的服務名是spring.application.name
配置的名字
,所以我們需要訪問的是http://127.0.0.1:8008/f1/test
但是我們發現,找不到這麼一個接口,我們開啓一下Gateway的日誌,看一下是爲什麼
修改配置文件
從新啓動一下,看一下控制檯信息
從日誌上我們可以看到,原來轉發的是大寫的,爲什麼呢?這是eureka服務註冊中心的規則,會把所有的服務id轉爲大寫,我們看一下eureka服務註冊中心的界面
所以這裏我們需要訪問的是http://127.0.0.1:8008/F1/test
我們多訪問幾次
從結果可以看到,我們完成了預定的負載均衡目標
o(*≧▽≦)ツ┏━┓
o(*≧▽≦)ツ┏━┓
o(*≧▽≦)ツ┏━┓
配套源碼:https://gitee.com/ww2510095/spring_cloud_learning