zoukankan      html  css  js  c++  java
  • Nacos集成Spring Cloud Gateway使用第一章:理解解释

    本章为入门理解

    第二章上手demo:Nacos集成Spring Cloud Gateway使用第二章,上手demo 主要是新建一个springcloud项目 集成nacos为注册中心,并且实现服务间的相互调用

    第三章:Nacos集成Spring Cloud Gateway使用第三章:nacos配置中心 再第二章的基础上 稍作改动 引用了nacos作为配置中心

    1.什么是nacos

      Nacos 支持基于 DNS 和基于 RPC 的服务发现(可以作为springcloud的注册中心)、动态配置服务(可以做配置中心)、动态 DNS 服务。

       1.1Nacos原理

      Nacos注册中心分为server与client,server采用Java编写,为client提供注册发现服务与配置服务。而client可以用多语言实现,client与微服务嵌套在一起,nacos提供sdk和openApi,如果没有sdk也可以根据openApi手动写服务注册与发现和配置拉取的逻辑

      1.2注册中心原理:

      服务注册方法:以Java nacos client v1.0.1 为例子,服务注册的策略的是每5秒向nacos server发送一次心跳,心跳带上了服务名,服务ip,服务端口等信息。同时 nacos server也会向client 主动发起健康检查,支持tcp/http检查。如果15秒内无心跳且健康检查失败则认为实例不健康,如果30秒内健康检查失败则剔除实例

      1.3配置中心原理

     

     2.什么是springcloud gateway

      2.1解释 前提

      Spring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技术开发的网关,Spring Cloud Gateway旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。Spring Cloud Gateway作为Spring Cloud生态系中的网关,目标是替代ZUUL。

      Spring Cloud Gateway 是 Spring Cloud 新推出的网关框架,之前是 Netflix Zuul。网关通常在项目中为了简化 前端的调用逻辑,同时也简化内部服务之间互相调用的复杂度;具体作用就是转发服务,接收并转发所有内外部的客户端调用;其他常见的功能还有权限认证,限流控制等等。

      2.2理解

    • Route: 【路由】 这个是网关的基本构成,由id,目标uri,一组断言,和一组和过滤器的定义,如果断言为真,则路由匹配
    • Predicate: 【断言】 输入类型是一个serverWebExchange ,我们可以使用它来自http请求的任何内容,比如headers等一些参数
    • Filter: 【过滤器】 gateway 中的fliter 分为两种类型的filter,分别是agteway filter和global filter 过滤器的filter将会对请求和相应进行修改处理

      过程:客户端向Spring Cloud Gateway发出请求。如果网关处理程序映射确定请求与路由匹配,则将其发送到网关Web处理程序。该处理程序通过特定于请求的过滤器链运行请求。

    筛选器由虚线分隔的原因是,筛选器可以在发送代理请求之前和之后运行逻辑。所有“前置”过滤器逻辑均被执行。然后发出代理请求。发出代理请求后,将运行“后”过滤器逻辑。

      说白了 Predicate 就是为了实现一组匹配规则,方便让请求过来找到对应的 Route 进行处理

     springboot.application.yml的gateway配置
    gateway:
      routes:
      #自定义服务id
        - id: test
       #下面验证通过会跳转的地址,如果加上 lb + 服务名 uri以lb://开头(lb代表从注册中心获取服务),后面接的就是你需要转发到的服务名称
          #uri: http://www.baidu.com
        uri: lb://serverone
          predicates:
            # 通过请求 ip 地址进行匹配  设置某个 ip 区间号段的请求才会路由
            #- RemoteAddr=192.168.1.1/24
            # Predicate 支持设置一个时间,在请求进行转发的时候,可以通过判断在这个时间之前或者之后进行转发
            #- After=2018-01-20T06:06:06+08:00[Asia/Shanghai]
            # 这个和上面那个刚好相反
            #- Before=2018-01-20T06:06:06+08:00[Asia/Shanghai]
            #时间段
            #- Between=2018-01-20T06:06:06+08:00[Asia/Shanghai], 2019-01-20T06:06:06+08:00[Asia/Shanghai]
            #通过cookie进行匹配,Cookie Route Predicate 可以接收两个参数,一个是 Cookie name , 一个是正则表达式,如果匹配上就会执行路由,如果没有匹配上则不执行。
              #使用 curl 测试,命令行输入: curl http://localhost:8080 --cookie "ityouknow=kee.e"
            #- Cookie=ityouknow, kee.e
            #Header Route Predicate和上面那条一样,也是可以接收两种方式
              #使用 curl 测试,命令行输入 curl http://localhost:8080  -H "X-Request-Id:666666" 如果后面不对的话会报错404
            #- Header=X-Request-Id, d+
            # 接收一组参数,一组匹配的域名列表 测试:curl http://localhost:8080  -H "Host: www.ityouknow.com"
            #- Host=**.ityouknow.com
            #通过请求方式匹配  POST、GET、PUT、DELETE 等不同的请求方式来进行路由  测试:curl http://localhost:8080
            #- Method=GET
            #通过请求路径匹配 接收一个匹配路径的参数来判断是否走路由。  测试:curl http://localhost:8080/foo/1
            #- Path=/foo/{segment}
            #通过请求参数匹配 {一个属性名 一个属性值} 属性值可以为正则表达式,如下面这个,只要请求汇总带有 smile 参数即会匹配路由,不带 smile 参数则不会匹配。
            #- Query=smile
              #Query 的值以键值对的方式进行配置,这样在请求过来时会对属性值和正则进行匹配,匹配上才会走路由。curl localhost:8080?keep=pub
            #- Query=keep, pu.
            #通过请求 ip 地址进行匹配,支持通过设置某个 ip 区间号段的请求才会路由 例如 192.168.0.1/16 (其中 192.168.0.1 是 IP 地址,16 是子网掩码)。
            #- RemoteAddr=192.168.1.1/24
    

      

  • 相关阅读:
    参考__JAVA
    债券价格和通胀率
    C++ 面试题
    欧式和美式期权
    explicit
    smart pointer
    const pointer
    manacher-马拉车算法
    输入有空格的字符串的2种方法
    bind()与connect()——计网中socket的使用
  • 原文地址:https://www.cnblogs.com/nuti/p/14081162.html
Copyright © 2011-2022 走看看