1 网关是我们服务的守门神,,所有服务的唯一入口
    网关的核心功能特性:

    1. 请求限流
    2. 路由
    3. 权限控制(验证用户的信息)
      image.png
      1. 权限控制:网关作为微服务入口,需要校验用户是是否有请求资格,如果没有则进行拦截。
      2. 路由和负载均衡,一切请求都需要经过网关,但是网关不处理业务,只对请求验证,根据某种规则 把请求转发到对应的服务
      3. 限流:当请求流量过高时,在网关中 按照服务能接受的请求速度来做相应的处理,使服务能正常运行,避免压力过大
      4. springcloud中网关中实现有2种 一种是zuul,一种是gateway zuul是基于servlet的实现 属于阻塞式编程,而gateway是属于响应式编程 异步非阻塞 效率高
      5. 开发流程
    4. 引入依赖gateway 和 discovery服务发现依赖 因为网关需要去注册中心拉取服务 实现负载均衡调用,
    5. 编写网关的配置:

    server:
    port: 10086
    spring:
    application:
    name: getaway
    cloud:
    nacos:
    server-addr: nacos:8848
    discovery:
    cluster-name: beijing
    namespace: 7b2cd09d-d581-4f01-8e3e-0c13a4190fac
    gateway:
    routes:
    - id: order-service # 路由id,自定义,只要唯一即可
    # uri: http://127.0.0.1:8081 # 路由的目标地址 http就是固定地址
    _uri: lb://orderservice
    # 路由的目标地址 lb就是负载均衡,后面跟服务名称
    predicates: # 路由断言,也就是判断请求是否符合路由规则的条件
    - Path=/order/** # 这个是按照路径匹配,只要以/user/开头就符合要求
    #- Query=name,jack
    filters:
    - AddRequestHeader=Truth, Itcast is freaking awesome!
    # 添加请求头_

    如果有跨域 需要配置跨域

    globalcors: # 全局的跨域处理
    add-to-simple-url-handler-mapping: true # 解决options请求被拦截问题
    _corsConfigurations:
    ‘[/**]’:
    allowedOrigins:
    # 允许哪些网站的跨域请求
    - “http://localhost:8090
    allowedMethods:
    # 允许的跨域ajax的请求方式
    - “GET”
    - “POST”
    - “DELETE”
    - “PUT”
    - “OPTIONS”
    allowedHeaders: “*”
    # 允许在请求中携带的头信息
    allowCredentials: true # 是否允许携带cookie
    maxAge: 360000 # 这次跨域检测的有效期_
    路由的配置:id 路由的唯一标识
    uri:路由的目标地址:lb 代表负载均衡
    路由断言(pridicates) 对 路由的断言
    路由过滤器:(filter)对请求或者响应的过滤

    1. 断言工厂 : 常用断言工厂Path 路径 - path=/user/** 必须满足这路径才能访问
    2. 过滤器:spring提供了31种过滤器 常用的有 filter - striapprefix =1 表示吧路径的第一个去掉
      1. 全局过滤器 实现globle 接口 常用 这个可以自己编写过滤的逻辑
      2. 代码: public class MygolableFilter Implements GloableFilter{
      3. publice Momo filter(serverWebexchange exchange,GatewayFilterchian chain){
      4. if(){
      5. return chain.filter.(exchange)}
      6. }
      7. return exchange.getrespnose().complate()
      8. }
    3. @order()注解是控制连接器执行流程 值越小 前置执行优先级越高 后置越低

    4. 令牌桶实现限流 (网关限流): 常见限流算法:” 计数器算法,漏桶算法,令牌通算法

    5. **令牌桶 实现原理: 准备一个令牌桶工厂 持续生成令牌 准备一个固定容量的令牌桶,每一个请求都需要获取到令牌才可以访问, 否则就拒绝服务

    **