欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring Cloud系列——Gateway

程序员文章站 2022-06-03 20:52:58
...

注意Spring Cloud系列——Gateway,各种配置、设置:

https://www.jianshu.com/p/dabf2d91fd6e

03.详细配置

1.路由谓词工厂(具体的配置和说明已注释到代码中)

spring:
  application:
    name: gateway-service
  cloud:
    gateway:
      routes:
      #指定时间前的路由地址
      - id: before_route
        uri: http://www.baidu.com
        predicates:
        - Before=2017-01-20T17:42:47.789-07:00
      #指定时间之间的路由地址
      - id: before_route
        uri: http://www.sohu.com
        predicates:
        - Between=2020-01-20T17:42:47.789-07:00,2020-01-21T17:42:47.789-07:00
      #指定时间后的路由地址
      - id: before_route
        uri: http://www.sina.com
        predicates:
        - After=2019-05-20T17:42:47.789-07:00
      #指定Cookie中有指定值的路由地址,这里注意有两个参数,第一个为Cookie的Key,第二个为正则表达式
      - id: cookie_route
        uri: http://www.qq.com
        predicates:
        - Cookie=chocolate,[A-Za-z]+
      #指定Header中有指定值的路由地址,有两个参数,第一个为Header的Key,第二个为正则表达式
      - id: header_route
        uri: http://www.163.com
        predicates:
        - Header=X-Request-Id, \d+
      #指定Host的路由
      - id: host_route
        uri: http://www.360.com
        predicates:
        - Host=**.somehost.org,**.anotherhost.org
      #指定请求方法的路由
      - id: method_route
        uri: http://www.baidu.com
        predicates:
        - Method=GET
      #segment作为参数,可以在接口后台获取
      - id: params_route
        uri: lb://test-client-service
        predicates:
        - Path=/test/{segment}
        filters:
        #SetPath filter 使用模版参数,修改请求路径
        - SetPath=/{segment}
        #AddRequestHeader过滤器添加Request头
        - AddRequestHeader=X-Request-Foo, Bar
      #ip地址控制路由,192.168.1.1
      - id: remoteaddr_route
        uri: http://localhost:8090
        predicates:
        - RemoteAddr=192.168.1.1
      #url中带有params查询的,如:http://localhost:9005/getUser?params=111,params后还可以加正则表达式,如:params,\d+
      - id: query_route
        uri: lb://test-client-service
        predicates:
        - Query=params

 

2.过滤工厂

路由过滤器允许以某种方式修改传入的HTTP请求或传出的HTTP响应,路径过滤器的范围限定为特定路径。

#以下为过滤工厂,过滤工厂与谓词工厂同级

        filters:
        #AddRequestHeader过滤器添加Request头
        - AddRequestHeader=X-Request-Foo, Bar

        #AddRequestParameter过滤器添加参数头
        - AddRequestParameter=bar, barValue

        #AddResponseHeader过滤器添加返回Response头
        - AddResponseHeader=X-Response-Foo, 123

        #PrefixPath添加前缀,如请求为/getUser,则会转成/mypath/getUser
        #- PrefixPath=/mypath

        #往exchange添加PRESERVE_HOST_HEADER_ATTRIBUTE
        - PreserveHostHeader

        #结合redis限流
        #redis-rate-limiter.replenishRate:允许用户每秒处理多少个请求
        #redis-rate-limiter.burstCapacity:令牌桶的容量,允许在一秒钟内完成的最大请求数
        - name: RequestRateLimiter
          args:
            key-resolver: "#{@remoteAddrKeyResolver}"
            redis-rate-limiter.replenishRate: 1
            redis-rate-limiter.burstCapacity: 5

        #RedirectTo 重定向,第一个参数是状态码,必须是3xx,第二个参数是要重定向的地址
        #- RedirectTo=302, http://www.baidu.com

        #删除NonProxy头信息,默认删除
        #Connection
        #Keep-Alive
        #Proxy-Authenticate
        #Proxy-Authorization
        #TE
        #Trailer
        #Transfer-Encoding
        #Upgrade
        #可以通过spring.cloud.gateway.filter.remove-non-proxy-headers.headers配置要删除得到头信息
        - RemoveNonProxyHeaders

        #RemoveRequestHeader 删除指定头信息filter
        - RemoveRequestHeader=X-Request-Foo

        #RemoveResponseHeader 删除返回头信息filter
        - RemoveResponseHeader=X-Response-Foo


        #RewritePath过滤工厂,下面这个写法的意思是把请求都带上前缀/foo,如请求是/example,则真正到达后台的请求会变成/foo/example
        - RewritePath=/(?<segment>.*), /foo/$\{segment}

        #RewriteResponseHeader 重写ResponseHeader,三个参数,第一个是头的key值,第二个是需要替换的值,第三个是替换后的值,其中第二个参数可以使用正则表达式来匹配
        - RewriteResponseHeader=X-Response-Foo, 123, 321

        #SaveSession 会话保存过滤器
        - SaveSession

        #SecureHeaders  默认往返回的response添加以下header,可以通过配置spring.cloud.gateway.filter.secure-headers 修改需要添加的header
#        X-Xss-Protection:1; mode=block
#        Strict-Transport-Security:max-age=631138519
#        X-Frame-Options:DENY
#        X-Content-Type-Options:nosniff
#        Referrer-Policy:no-referrer
#        Content-Security-Policy:default-src 'self' https:; font-src 'self' https: data:; img-src 'self' https: data:; object-src 'none'; script-src https:; style-src 'self' https: 'unsafe-inline'
#        X-Download-Options:noopen
#        X-Permitted-Cross-Domain-Policies:none
        - SecureHeaders

        #SetResponseHeader ,修改responseHeader
        - SetResponseHeader=X-Response-Foo1, modifyValue

        #SetStatus 设置返回的状态,可以是code(如404,401,403),也可以是对应的描述(注意描述中间的空格要用下划线替换)
        - SetStatus=BAD_GATEWAY

        #StripPrefix 除去请求的前X位,如X是2且请求是/1/2/3,则最终请求是/3,如X是2且请求是/1,则最终请求是/
        - StripPrefix=0

        #Retry 重试机制
        #retries,默认为3,用来标识重试次数
        #series,用来指定哪些段的状态码需要重试,默认SERVER_ERROR即5xx
        #statuses,用于指定哪些状态需要重试,默认为空,它跟series至少得指定一个
        #methods,用于指定那些方法的请求需要重试,默认为GET
        #exceptions,用于指定哪些异常需要重试,默认为java.io.IOException
        - name: Retry
          args:
            retries: 3
            series:
              - SERVER_ERROR
            methods:
              - GET
              - POST
            exceptions:
              - java.lang.RuntimeException

        # RequestSize 请求最大size
        - name: RequestSize
          args:
            maxSize: 1000

3.Hystrix过滤工厂

Hystrix是Netflix的一个库,它实现了断路器模式。Hystrix GatewayFilter允许您将断路器引入网关路由,保护您的服务免受级联故障的影响,并允许您在下游故障时提供回退响应。

#Hystrix gateway过滤器工厂,需要引入hystrix包,当请求服务超时时,请求gateway本地的fallback接口
        - name: Hystrix
          args:
            name: fallbackcmd
            fallbackUri: forward:/fallback
      - id: ingredients-fallback
        uri: lb://hystrix-service
        predicates:
        - Path=/fallback
        filters:
        - name: FallbackHeaders
          args:
            executionExceptionTypeHeaderName: Test-Header

        #此配置可配置gateway请求的超时时间
        #hystrix.command.fallbackcmd.execution.isolation.thread.timeoutInMilliseconds: 5000
        - Hystrix=testHystrixExtendsCommandService

 

相关标签: springcloud gateway