1、網關路由過濾配置
1.1、網關跨域配置
spring:
application:
name: gateway
# 微服務網關跨域配置
cloud:
gateway:
globalcors:
cors-configurations:
'[/**]': # 匹配所有請求
allowedOrigins: "*" # 跨域處理 允許所有的域
allowedMethods: # 支持的方法
- GET
- POST
- PUT
- DELETE
1.2、Host過濾配置
spring:
application:
name: gateway
# 微服務網關跨域配置
cloud:
gateway:
routes: # 路由過濾
- id: user_service # 唯一標識
# uri:請求要路由到的微服務地址
uri: http://localhost:8081
predicates: # 路由規則配置
# Host:根據用戶請求域名過濾
# 所有以cloud.pkx.com的請求將被路由到http://localhost: 8081微服務
- Host= cloud.pkx.com**
1.3、Path路徑過濾配置
spring:
application:
name: gateway
cloud:
gateway:
routes: # 路由過濾
- id: user_service # 唯一標識
# uri:請求要路由到的微服務地址
uri: http://localhost:8081
predicates: # 路由規則配置
# Path:根據用戶請求路徑過濾
# 所有以/user開始的請求,都路由到http://localhost:8081微服務
- Path=/user/**
1.4、StripPrefix過濾配置
spring:
application:
name: gateway
# 微服務網關跨域配置
cloud:
gateway:
routes: # 路由過濾
- id: user_service # 唯一標識
# uri:請求要路由到的微服務地址
uri: http://localhost:8081
predicates: # 路由規則配置
# 所有以/api/user開始的請求,都路由到http://localhost:8081微服務
- Path=/api/user/**
filters:
# StripPrefix:截取路徑前綴路徑
# StripPrefix=1: 將請求路徑中的第1個路徑去掉,請求路徑以/區分,一個/代表一個路徑
# 每次請求真實微服務時候,需要微服務網關將/api去掉
- StripPrefix=1
1.5、PrefixPath過濾配置
spring:
application:
name: gateway
# 微服務網關跨域配置
cloud:
gateway:
routes: # 路由過濾
- id: user_service # 唯一標識
# uri:請求要路由到的微服務地址
uri: http://localhost:8081
predicates: # 路由規則配置
# 所有以/**開始的請求,都路由到http://localhost:8081微服務
- Path=/**
filters:
# PrefixPath:給請求路徑自動加上前綴路徑
# PrefixPath=/user:當用戶請求/**時:網關微服務在用戶請求路徑前加上:/user/**
- PrefixPath=/user
1.6、Gateway-LoadBanlancerClient實現負載均衡
spring:
application:
name: gateway
cloud:
gateway:
routes: # 路由過濾
- id: user_service # 唯一標識
# lb: 使用loadBalanceClient實現負載均衡,後面users是微服務的名稱[主要應用於集羣環境]
uri: lb://users
predicates: # 路由規則配置
# Path:根據用戶請求路徑過濾
# 所有以/user開始的請求,都路由到http://localhost:8081微服務
- Path=/user/**
2、網關限流配置--基於IP限流
2.1、導入依賴
<!--redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis-reactive</artifactId>
</dependency>
2.2、修改啓動類:創建唯一標識對象
@SpringBootApplication
@EnableEurekaClient
public class GatewayWebApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayWebApplication.class, args);
}
/**
* 創建用戶唯一標識:使用IP作爲用戶唯一標識,根據IP進行限流操作
* @return
*/
@Bean(name = "iPKeyResolver")
public KeyResolver userKeyResolver(){
return new KeyResolver() {
@Override
public Mono<String> resolve(ServerWebExchange exchange) {
// 獲得用戶iP
String ip = exchange.getRequest().getRemoteAddress().getHostString();
return Mono.just(ip);
}
};
}
2.3、修改application.yml:增加配置信息
spring:
application:
name: gateway
# 微服務網關跨域配置
cloud:
gateway:
routes: # 路由過濾
- id: user_service # 唯一標識
#lb:使用loadBalanceClient實現負載均衡,後面users是微服務的名稱[應用於集羣環境]
uri: lb://users
# Path:根據用戶請求路徑過濾
# 所有以/user開始的請求,都路由到http://localhost:8081微服務
# - Path=/user/**
# 局部限流過濾器
- name: RequestRateLimiter # 請求數限流,名字不能隨便寫,使用默認的factory
args:
key-resolver: "#{@iPKeyResolver}"
# 每秒鐘只允許1個請求
redis-rate-limiter.replenishRate: 1
# 允許併發有2個請求[寬限的個數]
reids-rate-limiter.burstCapacity: 2