SpringCloud Gateway 微服务网关

官网地址最新3.0.3:https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#configuring-route-predicate-factories-and-gateway-filter-factories

Spring Cloud Gateway旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。

路由Route:这是网关的基本构建块。它由一个ID,一个目标URL,一组断言,一组过滤器定义。如果断言为真,则路由匹配。

Predicate断言:输入类型是一个ServerWebExchange. 我们可以使用它来断言来自HTTP请求的任何内容

过滤器Fileter,Gateway中的Filter分为两种类型的Filter(全局过滤和普通过滤),分别是GatewayFilter和GlobalFilter。过滤器Filter将会对请求和响应进行修改处理。

1、路由: 

spring:
  cloud:
    gateway:
      routes:
      - id: after_route      #路由的ID,没有固定规则但要求唯一,简易配合服务名
        uri: https://example.org  ##(匹配后提供服务的路由地址  开发中多用 lb://服务名称,就是application-name)
        predicates:                ##断言,路径相匹配的进行路由
        -xxxx
        filters:                    #动态过滤器,此路由需要以下过滤器
        -xxx

 我本地gateway 的例子

spring:
  cloud:
    gateway:
      routes:
        # 认证中心
        - id: city-open-auth
          uri: lb://city-open-auth
          predicates:
            - Path=/auth/**
          filters:
            # 验证码处理
            - CacheRequestFilter
            - ValidateCodeFilter
            - StripPrefix=1
        # 系统模块
        - id: city-open-system
          uri: lb://city-open-system
          predicates:
            - Path=/system/**
          filters:
            - StripPrefix=1

2、 断言

大概有11个规则匹配

1、匹配在指定日期时间之后发生的请求
predicates:         - After=2017-01-20T17:42:47.789-07:00[America/Denver]
2、匹配发生在指定 之前的请求datetime
predicates:         - Before=2017-01-20T17:42:47.789-07:00[America/Denver]
3、匹配发生在 之后datetime1和之前的请求datetime2
- Between=2017-01-20T17:42:47.789-07:00[America/Denver], 2017-01-21T17:42:47.789-07:00[America/Denver]
4、匹配具有给定名称且其值与正则表达式匹配的 cookie
predicates:         - Cookie=chocolate, ch.p
5、接收 2 个参数,一个 header 中属性名称和一个正则表达式,这个属性值和正则表达式匹配则执行。
predicates:         - Header=X-Request-Id, \d+
6、Host Route Predicate 接收一组参数,一组匹配的域名列表,这个模板是一个 ant 分隔的模板,用.号作为分隔符。它通过参数中的主机地址作为匹配规则
predicates:  - Host=**.somehost.org,**.anotherhost.org

7、需要methods的参数,它是一个或多个参数:HTTP方法来匹配。

可以通过是 POST、GET、PUT、DELETE 等不同的请求方式来进行路由。

predicates:         - Method=GET,POST
8、接收2个匹配路径的参数来判断是否走路由。
predicates:         - Path=/red/{segment},/blue/{segment}
9、支持传入两个参数,一个是属性名一个为属性值,属性值可以是正则表达式
predicates: - Query=smile
10、如果请求包含red其值与正则gree.表达式匹配的查询参数,则前面的路由匹配,因此greengreet将匹配
predicates:         - Query=red, gree.
11、Predicate 也支持通过设置某个 ip 区间号段的请求才会路由,RemoteAddr Route Predicate 接受 cidr 符号 (IPv4 或 IPv6) 字符串的列表(最小大小为 1),例如 192.168.0.1/16 (其中 192.168.0.1 是 IP 地址,16 是子网掩码)。
predicates: - RemoteAddr=192.168.1.1/24

12、该Weight路线谓词工厂有两个参数:groupweight(一个int)。权重是按组计算的。以下示例配置权重路由谓词:

该路由会将约 80% 的流量转发到weighthigh.org,将约 20% 的流量转发weightlow.org

13、组合使用
spring:
  cloud:
    gateway:
      routes:
       - id: host_foo_path_headers_to_httpbin
        uri: http://ityouknow.com
        predicates:
        - Host=**.foo.org
        - Path=/headers
        - Method=GET
        - Header=X-Request-Id, \d+
        - Query=foo, ba.
        - Query=baz
        - Cookie=chocolate, ch.p
        - After=2018-01-20T06:06:06+08:00[Asia/Shanghai]

3、过滤

路由过滤器允许以某种方式修改传入的 HTTP 请求或传出的 HTTP 响应。路由过滤器的范围是特定的路由。Spring Cloud Gateway 包含许多内置的 GatewayFilter 工厂

具体的过滤请异步官网看下

主要说下自定义过滤

第一种:GatewayFilter  factory (配置yml,毕竟约定大于配置)

需求一般在配置文件中配置,GatewayFilter,可以实现工厂,自定义过滤器工厂需要继承extend   AbstractGatewayFilterFactory,

此类需要@Componment,在配置文件application.yml的gateway:routes:filter: 配置

配置文件内容在上面的路由介绍过了

 

第二种:GatewayFilter(application.yml中无法配置使用)

需要实现implements GatewayFilter,Ordered

Order越大 优先级越低

order越小 优先级越高

定义好MyFilter,其需要跟Router绑定使用,不能用application.yml文件配置

 

第三种:自定义GlobalFilter全局过滤

需要继承 实现GlobalFilter,ordered 加上@Componment

 4、过滤器中的一个常见的知识点:

比如   配置文件中  

spring:
  cloud:
   gateway:
     routes:
          -id:  #唯一值
          uri: lb://微服务名(好多种,具体地址也可以http://xxxx)
  predicaties:  断言:相对于正则匹配 请求
            -path = /auth/** #path是断言的其中一种方式,匹配成功后会把路径加到uri后面,请求后端服务
      filters:  
         -CacheRequesFilter  #自定义的过滤器
         -Striprefix = 1     
      

Striprefix 参数表示在将请求发送到下游之前从请求中剥离的路径个数

    


        Gateway的路由方式和Nginx代理非常类似

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值