gateway就是用來替換zuul的,功能都差不多,我們看下它怎么來跟nacos一起玩。老套路,三板斧:
1、pom:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <artifactId>spring-cloud-alibaba-gateway</artifactId> <groupId>com.wlf</groupId> <version>0.0.1-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.7.RELEASE</version> </parent> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Greenwich.SR2</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>0.9.0.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
2、application.yml(因為涉及到路由映射,routes下面會有很多配置,yml成了標配):
#端口 server: port: 8484 #應用名 spring: application: name: lxytrans-gateway #注冊中心 cloud: nacos: discovery: server-addr: localhost:8848 register-enabled: true # 網關 gateway: discovery: locator: lowerCaseServiceId: true enabled: true routes: - id: lxytrans-consumer uri: lb://lxytrans-consumer predicates: - Path=/wlf/consumer/** filters: - StripPrefix=2 - id: lxytrans-provider uri: lb://lxytrans-provider predicates: - Path=/wlf/provider/** filters: - StripPrefix=2
這里的配置說明下:
spring.cloud.gateway.discovery.locator.lowerCaseServiceId:支持服務實例名小寫(如果nacos上的服務名是大寫的話)。
spring.cloud.gateway.discovery.locator.enabled:支持gateway到注冊中心進行服務的注冊和發現,打開后可以直接通過服務實例名訪問。
spring.cloud.gateway.routes:
id:路由的ID,唯一。uri:匹配路由的轉發地址,lb是load balance縮寫,后面帶轉發的服務實例名。predicates:配置該路由的斷言,有很多種斷言方式,可以組合使用。最常用的Path是請求路徑匹配。- filters:過濾規則,也是有多種。這里StripPrefix用來截去Path前面的路徑,從左邊開始截,配1就截去1,上面配2,那么/wlf/provider/hello最終轉發過去就是/hello。
3、啟動類:
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @EnableDiscoveryClient @SpringBootApplication public class TransGatewayApplication { public static void main(String[] args) { SpringApplication.run(TransGatewayApplication.class, args); } }
打完收功。跑起來后nacos會出現gateway實例:

我們的測試還是基於之前弄的服務提供方和消費方(最新的參見0.9.0.RELEASE版本的spring cloud alibaba sentinel+feign降級處理實例)。從上面看到服務消費方、提供方的實例都是活的,通過網關來試試調用它們:
直接用實例名(消費方調服務方超時降級):

用路由:


