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

  

原文地址:https://www.cnblogs.com/nuti/p/14081162.html