是什么:SpringCloud Gateway是基于WebFlux框架实现的,而WebFlux框架底层则使用了高性能的Reactor模式通信框架Netty

          Spring WebFlux 是 Spring 5.0 引入的新的响应式框架,区别于 Spring MVC,它不需要依赖Servlet API,它是完全异步非阻塞的,并且基于 Reactor 来实现响应式流规范

作用:

  1. 反向代理
  2. 鉴权
  3. 流量控制
  4. 熔断
  5. 日志监控

执行流程:

核心逻辑:路由转发+执行过滤器链

客户端 -----> Springcloud gateway ----->Gateway Handler Mapping(匹配对应的路由)------->Gateway Web Handler------->过滤器链(执行对应的业务)---->返回

            过滤器可以在代理服务器执行前  后执行业务逻辑

          执行在业务逻辑之前:做参数校验、权限校验、流量监控、日志输出、协议转换等

         执行咋业务逻辑之后:在“post”类型的过滤器中可以做响应内容、响应头的修改,日志的输出,流量监控

 

网关路由的实现过程,基础操作在:com.capgemini.springcloud.Gateway9527

实现路由的两种方式:配置  初始化类(路由代替了ip+port,后面的路径还是要保持一致

 

动态路由:实现修改  URI改为服务名,lb协议代表开启负载均衡功能

cloud:
gateway:
discovery:
locator:
enabled: true #开启从注册中心动态创建路由的功能,利用微服务名进行路由
routes:
  - id: payment_routh #payment_route    #路由的ID,没有固定规则但要求唯一,建议配合服务名
    #uri: http://localhost:8001          #匹配后提供服务的路由地址
    uri: lb://cloud-payment-service #匹配后提供服务的路由地址  需要注意的是uri的协议为lb,表示启用Gateway的负载均衡功能。
    predicates:
      - Path=/payment/get/**         # 断言,路径相匹配的进行路由


断言:为了实现一组匹配规则,让请求过来找到对应的Route进行处理
具体实现:
predicates:
    - Path=/payment/lb/**         # 断言,路径相匹配的进行路由
    - After=2022-07-05T15:10:03.685+08:00[Asia/Shanghai]  #满足这个时间后  才可以就行访问
    #- Before=2020-02-05T15:10:03.685+08:00[Asia/Shanghai]  #之前
    #- Between=2020-02-02T17:45:06.206+08:00[Asia/Shanghai],2020-03-25T18:59:06.206+08:00[Asia/Shanghai] #中间
   # - Cookie=username,zzyy  #http://localhost:9527/payment/lb --cookie "username=zzyy" 带这个cookie访问
    #- Header=X-Request-Id, \d+  # 请求头要有X-Request-Id属性并且值为整数的正则表达式    curl http://localhost:9527/payment/lb -H "X-Request-Id:123
    - Host=**.atguigu.com   #正确:curl http://localhost:9527/payment/lb -H "Host:"   满足最后是atguigu.com
    - Query=username, \d+  # 要有参数名username并且值还要是整数才能路由   http://localhost:9527/payment/lb?username=31
过滤器:一般使用自定义过滤器(implements GlobalFilter,Ordered)
  实现 全局日志记录
      统一网关鉴权