https://blog.csdn.net/lizz861109/article/details/103697453

spring:
  cloud:
    gateway:
        filter:
            remove-hop-by-hop:
              headers:  #默认的移除request中的header
                - aaa
                - bbb
#      httpclient:
#        connect-timeout: 1000 # 转发后端服务超时时间
#        response-timeout: 3s  # 转发后端服务响应超时时间
#      discovery:
#        locator:
#          enabled: true #开启服务注册和发现
#          lower-case-service-id: true #注册名转为小写
      routes: #路由配置
        - id: route_1 #直接跳转到指定域名下 http://10.2.11.6:8808/gw/1 > http://10.2.11.6:8800/gw/1
          uri: http://10.2.11.6:8800 #目标路径
          predicates: #谓词匹配
            - Path=/gw/** #匹配路径
        - id: route_2 #去除前缀跳转 http://10.2.11.6:8808/sp/hi/1 > http://10.2.11.6:8800/hi/1
          uri: http://10.2.11.6:8800 #目标路径
          predicates: #谓词匹配
            - Path=/sp/** #匹配路径
            - Method=GET #指定方式
          filters:
            - StripPrefix=1 #去除第一个级前缀
        - id: route_3 # 增加前缀  http://10.2.11.6:8808/pp/1 > http://10.2.11.6:8800/hi/1
          uri: http://10.2.11.6:8800  #目标路径
          predicates: #谓词匹配
            - Path=/pp/** #匹配路径
          filters:
            - StripPrefix=1 #去除第一个级前缀
            - PrefixPath=/hi #
        - id: route_4 # 重写前缀  http://10.2.11.6:8808/rp/1 > http://10.2.11.6:8800/hi/1
          uri: http://10.2.11.6:8800  #目标路径
          predicates: #谓词匹配
            - Path=/rp/** #匹配路径
          filters:
            - RewritePath=/rp, /hi
        - id: route_5 # 动态重写前缀  http://10.2.11.6:8808/rp1 > http://10.2.11.6:8800/hi/rp1
          uri: http://10.2.11.6:8800  #目标路径
          predicates: #谓词匹配
            - Path=/rp1/** #匹配路径
          filters:
            - RewritePath=(?<oldPath>^/), /hi$\{oldPath}
        - id: route_6 # 指定跳转路径  http://10.2.11.6:8808/setpath > http://10.2.11.6:8800/hi/1
          uri: http://10.2.11.6:8800  #目标路径
          predicates: #谓词匹配
            - Path=/setpath/** #匹配路径
          filters:
            - SetPath=/hi/1
        - id: route_7 # 设置路径,同时使用时,根据前后顺序进行设置,改变顺序结果不同 http://10.2.11.6:8808/allpath > http://10.2.11.6:8800/hi/a
          uri: http://10.2.11.6:8800  #目标路径
          predicates: #谓词匹配
            - Path=/allpath/** #匹配路径
          filters:
            - PrefixPath=/b # http://10.2.11.6:8808/allpath > http://10.2.11.6:8800/b/allpath
            - SetPath=/a # http://10.2.11.6:8800/b/allpath > http://10.2.11.6:8800/a
            - RewritePath=(?<oldPath>^/), /hi$\{oldPath} # http://10.2.11.6:8800/b/a > http://10.2.11.6:8800/hi/a
        - id: route_8 # 通过eureka访问 http://10.2.11.6:8808/eureka/lb/1 > http://10.2.11.6:8800/lb/1
          uri: lb://lizz-eureka-provider  #目标路径
          predicates: #谓词匹配
            - Path=/eureka/** #匹配路径
#          metadata:
#            connect-timeout: 200 #响应时间 ,当前2.2.0版本暂不支持
#            response-timeout: 1000 #链接时间,当前2.2.0版本暂不支持
          filters:
            - StripPrefix=1 #去除第一个级前缀
            - name : RequestSize
              args:
                maxSize: 500000 #限制请求数据大小,byte,比较的长度String contentLength = request.getHeaders().getFirst("content-length");
            - name: Retry #重试过滤器,重试调用lizz-eureka-provider的次数
              args:
                retries: 1 #重试次数 默认3次
                statuses: BAD_GATEWAY #HttpStatus 什么情况下重试,可以是错误码,如:500,502
                series: # HttpStatus.重试系列 默认 SERVER_ERROR-5xx,SUCCESSFUL-2xx ,空为异常补重试,与statuses并行使用
                exceptions:  #异常重试 默认IOException and TimeoutException,空为异常补重试
                methods: GET,POST # HttpMethod 重试的方法 默认 GET GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE;
                backoff: #延时重试
                  firstBackoff: 10ms #首次延时次数
                  maxBackoff: 50ms # 最大延迟后停止
                  factor: 2 #重试因子 下一次重试延时为firstBackoff*2*n次
                  basedOnPreviousValue: false #为true, backoff 计算公式为 prevBackoff * factor.
        - id: route_9 # 流量限制
          uri: lb://lizz-eureka-provider  #目标路径
          predicates: #谓词匹配
            - Path=/iprate/** #匹配路径
          filters:
            - StripPrefix=1 #去除第一个级前缀
            - name: RequestRateLimiter
              args:
                redis-rate-limiter: #过期时间=burstCapacity/replenishRate*2s
                  replenishRate: 3 #每次补充数量
                  burstCapacity: 1000 #突发容量
                  requestedTokens: 1 #每次请求消耗几个令牌,可以控制不同频率,默认1
                key-resolver: "#{@ipKeyResolver}" # ipKeyResolver 自定义限流柜子
#                rate-limiter: "#{@myRateLimiter}" # 使用自定义限流规则
        - id: route_10 # 修改header
          uri: lb://lizz-eureka-provider  #目标路径
          predicates: #谓词匹配
            - Path=/userrate/** #匹配路径
          filters:
            - AddRequestHeader=X-Request-Foo,Bar #增加转发请求的header 格式:key,value
            - AddRequestParameter=foo,bar #增加转发请求的参数
            - AddResponseHeader=X-Request-Foo,Bar #增加返回数据的header
            - RemoveRequestHeader=X-Request-Foo #移除转发请求的header
            - RemoveResponseHeader=X-Request-Foo #移除返回数据的header