1. Spring Cloud Gateway 整合Nacos、LoadBalancer 實現企業級網關
前置工作:
- 創建 SpringBoot 多模塊項目
- 創建網關(gateway-service)、用戶(user-service)模塊
- 用戶模塊添加 Nacos discovery 支持以及 Spring Web,并配置 Nacos 連接信息
準備用戶模塊的 controller :
@RestController
@RequestMapping("/user")
public class UserController {@Autowired // 獲取動態端口private ServletWebServerApplicationContext context; @RequestMapping("/getname")public String getName() {return context.getWebServer().getPort() +"--UserService:name=java-"+new Random().nextInt(100);}
}
【實現步驟】
1. 添加依賴
- Gateway、Nacos、LoadBalancer
2. 設置路由
- 配置 Gateway 路由規則:(id、uri、predicates)
- 設置 Nacos 注冊中心地址
1.1 添加依賴
此處的依賴添加在 gateway-service 子模塊中:
<dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!-- 高版本需要添加客戶端負載均衡 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency>
</dependencies>
如果依賴加載報錯,可以先檢查一下父模塊
- 是否統一版本
- <dependencyManagement> 中是否有以下三個依賴
<!-- 統一版本 -->
<spring-cloud-alibaba.version>2022.0.0.0</spring-cloud-alibaba.version>
<spring-cloud.version>2022.0.0</spring-cloud.version>
<dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>
1.2 設置路由
在 gateway-service 中的配置文件中,去設置路由規則以及 Nacos 注冊中心的地址,
spring:cloud:nacos: # 配置注冊中心discovery:server-addr: localhost:8848username: nacospassword: nacosgateway: # 配置網關routes:- id: userserviceuri: lb://user-service-gateway # loadbalancerpredicates:- Path=/user/**, /userlog/**server:port: 10086
做好以上兩步后,可以復制一個user-service,同時啟動兩個服務,通過網關路由到服務上的時候,看看是否是默認的輪詢負載均衡策略:
?
此時啟動 gateway-service、兩個 user-service,使用網關模塊中配置的 10086 端口去訪問服務時,就能看到輪詢的負載均衡策略了。
?