Spring Cloud系列——Gateway

注意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是一个基于Spring Cloud的全新项目,它是基于Spring 5.0、Spring Boot 2.0和Project Reactor等技术开发的网关。它的主要目标是为微服务架构提供一种简单有效的统一API路由管理方式。SpringCloud Gateway具有许多特性,包括动态路由、断路器功能、服务发现功能、请求限流功能和支持路径重写等。它是基于WebFlux框架实现的,底层使用了高性能的Reactor模式通信框架Netty。总之,SpringCloud Gateway是一个功能强大且易于使用的网关,可用于构建和管理微服务架构中的API路由。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [springcloud入门——gateway](https://blog.csdn.net/tang_seven/article/details/118523647)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [springcloudGateWay](https://blog.csdn.net/qq_35512802/article/details/122049808)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值