1.作用功能:
統(tǒng)一路由
安全
監(jiān)控
限流
2.相關(guān)概念:
Route(路由):這是網(wǎng)關(guān)的基本構(gòu)建塊猎物。它由一個 ID臼朗,一個目標 URI豹缀,一組斷言和一組過濾器定義藤巢。如果斷言為真竟纳,則路由匹配撵溃。
Predicate(斷言):這是一個 Java 8 的 Predicate。輸入類型是一個 ServerWebExchange锥累。我們可以使用它來匹配來自 HTTP 請求的任何內(nèi)容缘挑,例如 headers 或參數(shù)。
Filter(過濾器):這是org.springframework.cloud.gateway.filter.GatewayFilter的實例桶略,我們可以使用它修改請求和響應语淘。
3.特征
基于 Spring Framework 5鬼悠,Project Reactor 和 Spring Boot 2.0
動態(tài)路由
Predicates 和 Filters 作用于特定路由
集成 Hystrix 斷路器
集成 Spring Cloud DiscoveryClient
易于編寫的 Predicates 和 Filters
限流
路徑重寫
4.Spring Cloud Gateway 網(wǎng)關(guān)路由有兩種配置方式:
在配置文件 yml 中配置
通過@Bean自定義 RouteLocator,在啟動主類 Application 中配置
5.Spring Boot的版本兼容問題
Spring Cloud Gateway 的G版本(Spring Cloud的2.1.x版本)與Spring Boot的2.2.0版本不兼容(編譯啟動沒問題亏娜,路由有問題No Such Method異常)
6.Spring Cloud Gateway 項目不能打成war包運行在傳統(tǒng)的基于Servlet的web容器中
基于Netty及webflux的web編程模型焕窝,異步非阻塞
7.pom.xml文件
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
????<modelVersion>4.0.0</modelVersion>
????????<groupId>com.tsnt</groupId>
????????<artifactId>gateway</artifactId>
????????<version>1.0-SNAPSHOT</version>
????????<name>gateway</name>
????<description>api gateway</description>
????<parent>
????????????<groupId>org.springframework.boot</groupId>
????????????<artifactId>spring-boot-starter-parent</artifactId>
????????????<version>2.1.9.RELEASE</version>
? ? ? ?????<relativePath/>
? ???? </parent>
????????<properties>
????????????????<spring.version>5.1.10.RELEASE</spring.version>
????????????????<springboot.version>2.1.9.RELEASE</springboot.version>
????????????????<spring-cloud.version>Greenwich.SR3</spring-cloud.version>
????????????</properties>
????<dependencies>
????<dependency>
????????????????<groupId>org.springframework.cloud</groupId>
? ? ? ? ? ? ? ?<artifactId>spring-cloud-starter-gateway</artifactId>
? ? ? ?</dependency>
? ? ? <dependency>
????????????<groupId>org.springframework.cloud</groupId>
????????????<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
????</dependency>
????????<dependency>
????????????<groupId>org.springframework.boot</groupId>
????????????<artifactId>spring-boot-starter-test</artifactId>
????????????<scope>test</scope>
????????</dependency>
</dependencies>
????<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>
????????</dependencies>
????</dependencyManagement>
????<build>
????????????<plugins>
????????????????????<plugin>
????????????????????????????????<groupId>org.springframework.boot</groupId>
????????????????????????????????<artifactId>spring-boot-maven-plugin</artifactId>
????????????????????</plugin>
????????????</plugins>
????</build>
</project>
8.application.yml? 分析
#開發(fā)環(huán)境配置
server:
????port: 9001
spring:
????application:
? ????? name: api-gateway? #注冊到Eureka上的serviceId(會默認變成大寫)
cloud:
????gateway:
????????discovery:
????????????locator:
? ? ? ? ????????? enabled: true? ? ?#開啟通過服務中心的自動根據(jù) serviceId 創(chuàng)建路由的功能。
? ? ? ? ????????? lowerCaseServiceId: true? ? #將請求路徑上的服務名配置為小寫
? ? ?????routes:
? ? ? ? ????-id: service? ? ????#自定義的路由ID维贺,保持唯一
? ? ? ? ????? uri: lb://SERVICE-CLIENT???? #目標服務地址
? ? ? ? ????? predicates:? ? ? ? ? ? ????? #路由條件
? ? ? ? ? ? ? ? - Path=/service/**
????????????????filters:? #過濾器
? ? ? ? ? ? ? ? ?- StripPrefix=1? ? ? ????#轉(zhuǎn)發(fā)請求時去除Path中的第一個過濾名稱(這里是service)
# Eureka服務中心配置
eureka:
????instance:
????????prefer-ip-address: true? ? ?# 為false時它掂,那么注冊到Eureka中的Ip地址就是本機的Ip地址
? ? ? ? #ip-address:ip #prefer-ip-address為true,將此ip地址注冊到Eureka中。調(diào)用的時候溯泣,發(fā)送的請求目的地就是此Ip地址
????client:
????????service-url:
? ? ????????? # 注冊Eureka Server
? ? ?????????defaultZone: http://localhost:9100/eureka/
logging:
????level:
? ? ????org.springframework.cloud.gateway: debug