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