SpringCloudGateway實現路由過濾和請求限流

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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章