本章为入门理解
第二章上手demo:Nacos集成Spring Cloud Gateway使用第二章,上手demo 主要是新建一个springcloud项目 集成nacos为注册中心,并且实现服务间的相互调用
第三章:Nacos集成Spring Cloud Gateway使用第三章:nacos配置中心 再第二章的基础上 稍作改动 引用了nacos作为配置中心
1.什么是nacos
1.1Nacos原理
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处理程序。该处理程序通过特定于请求的过滤器链运行请求。
筛选器由虚线分隔的原因是,筛选器可以在发送代理请求之前和之后运行逻辑。所有“前置”过滤器逻辑均被执行。然后发出代理请求。发出代理请求后,将运行“后”过滤器逻辑。

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