6、服务网关 Gateway

本文详细介绍了Spring Cloud Gateway,包括网关的作用、路由转发、Predicate断言理解与实战、过滤器Filter的使用,特别是Gateway Filter与Global Filter,并解析了AddRequestHeaderGatewayFilterFactory源码,同时探讨了自定义服务网关的实现。
摘要由CSDN通过智能技术生成

 

目录

6.1、网关的理解

6.2、Predicate 断言

6.2.1、Predicate 理解

6.2.2、Predicate 实战

6.3、Filter 过滤器

6.3.1、Gateway Filter

6.3.2、Filter 实战

6.3.3、追溯 AddRequestHeaderGatewayFilterFactory 源码实现

6.3.4、Global Filter 全局路由

6.4、网关的逻辑图

6.5、自定义服务网关


6.1、网关的理解

网关是流量的入口,在微服务中是很重要的,常见的功能还有路由转发,权限校验,限流控制等作用。

网关通常作用:

  1. 路由:协议转换,路由转发
  2. 监控:流量聚合,对流量进行监控
  3. 日志:日志输出
  4. 限流:作为整个系统的前端工程,对流量进行控制,有限流的作用
  5. 安全:外部流量只能通过网关才能访问系统
  6. 鉴权:可以在网关层做权限的控制
  7. 缓存:可以在网关层做缓存

服务网关的理解:

    客户端向 Spring Cloud Gateway 发出请求,如果 Gateway Handler Mapping 确定请求与路由匹配(这时候用到 predicate,predicate 决定了一个请求走哪一个路由),则将其发送到 Gateway web handler 处理。Gateway web handler 处理请求时会经过一系列的过滤器链。过滤器链被虚线划分的原因是过滤器链可以在发送代理请求之前或之后执行过滤逻辑。先执行所有“pre”过滤器逻辑,然后进行代理请求。在发出代理请求之后,收到代理服务的响应之后执行“post”过滤器逻辑,在这里可以响应数据进行修改,比如响应头、协议的转换等。

6.2、Predicate 断言

6.2.1、Predicate 理解

predicate 来自于 java8 的接口。predicate 接受一个输入参数,返回一个布尔值结果。该接口包含多种默认方法来将 predicate 组合成其他复杂的逻辑(比如:与或非)可以用于接口请求参数校验、判断新老数据是否有变化需要进行更新操作。add——与、or——或、negate——非。

org.springframework.cloud.gateway.handler.predicate 列举各种 Predicate:

6.2.2、Predicate 实战

//1、依赖Jar
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
//2、配置文件 application.yml
server:
  port: 8081
spring:
  profiles:
    ##//指定你要激活的文件配置,对应下面所有配置的profiles的值。
    active: query_route
---# 断言:在这个时间之后的可以访问。也就说,下面这个时间设置,你访问的话是报404的。
spring:
   profiles: after_route
  cloud:
    gateway:
      routes:
      - id: after_route
        uri: http://localhost:8080/hello
        predicates:
        - After=2019-01-20T17:42:47.789-07:00[America/Denver]
---# 断言:加头部信息。 //$ curl -H 'X-Request-Id:1' localhost:8081
        predicates:
        - Header=X-Request-Id, \d+
---# 断言: 加Cookie信息。//$ curl -H 'Cookie:name=forezp' localhost:8081
        predicates:
        - Cookie=name, forezp
---# 断言:按域名拦截。//curl -H 'Host:www.fangzhipeng.com' localhost:8081
        predicates:
        - Host=**.xbmchina.cn
---# 断言:按请求方式拦截。//$ curl -XPOST localhost:8081
        predicates:
        - Method=GET
---# 断言:按地址路由拦截。//$ curl localhost:8081/hello
        predicates:
        - Path=/hello
---# 断言:按查询参数拦截。// curl localhost:8081?foo=bar
        predicate
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值