5,服务网关:

zuul停更了,

13,GateWay

image.png
image.png
gateway之所以性能好,因为底层使用WebFlux,而webFlux底层使用netty通信(NIO)

image.png

GateWay的特性:

image.png

GateWay与zuul的区别:

image.png

zuul1.x的模型:

image.png
image.png

什么是webflux:

是一个非阻塞的web框架,类似springmvc这样的
image.png

GateWay的一些概念:

1,路由:

路由是构建网关的基本模块,它由ID,目标URI,一系列的断言和过滤器组成,如果断言为true则匹配该路由
就是根据某些规则,将请求发送到指定服务上

2,断言:

image.png
就是判断,如果符合条件就是xxxx,反之yyyy

3,过滤:

image.png路由前后,过滤请求

GateWay的工作原理:

image.png
image.png

使用GateWay:

新建一个GateWay的项目
名字: cloud_gateway_9527

1,pom

2,配置文件

image.png

3,主启动类

image.png

4,针对pay模块,设置路由:

我们目前不想暴露8001端口,希望在8001外面套一层9527

image.png
修改GateWay模块(9527)的配置文件:
image.png
这里表示,
当访问localhost:9527/payment/get/1时,
路由到localhost:8001/payment/get/1

5,开始测试

启动7001,8001,9527

  1. 如果启动GateWay报错
  2. 可能是GateWay模块引入了web和监控的starter依赖,需要移除

访问:
localhost:9527/payment/get/1
image.png

6,GateWay的网关配置,

  1. **GateWay的网关配置,除了支持配置文件,还支持硬编码方式**

7使用硬编码配置GateWay:

创建配置类:

image.png

8,然后重启服务即可

重构:

上面的配置虽然首先了网关,但是是在配置文件中写死了要路由的地址
现在需要修改,不指定地址,而是根据微服务名字进行路由,我们可以在注册中心获取某组微服务的地址
需要:
1个eureka,2个pay模块

修改GateWay模块的配置文件:

image.png

然后就可以启动微服务.测试

Pridicate断言:

image.png
我们之前在配置文件中配置了断言:
image.png
这个断言表示,如果外部访问路径是指定路径,就路由到指定微服务上
可以看到,这里有一个Path,这个是断言的一种,断言的类型:
image.png

  1. After:
  2. 可以指定,只有在指定时间后,才可以路由到指定微服务

image.png
这里表示,只有在2020年的2月21的15点51分37秒之后,访问才可以路由
在此之前的访问,都会报404
如何获取当前时区?**

image.png

  1. before:
  2. after类似,他说在指定时间之前的才可以访问
  3. between:
  4. 需要指定两个时间,在他们之间的时间才可以访问

image.png

  1. cookie:
  2. 只有包含某些指定cookie(key,value),的请求才可以路由

image.png
image.png

  1. Header:
  2. 只有包含指定请求头的请求,才可以路由

image.png
image.png
image.png

  1. host:
  2. 只有指定主机的才可以访问,
  3. 比如我们当前的网站的域名是www.aa.com
  4. 那么这里就可以设置,只有用户是www.aa.com的请求,才进行路由

image.png
image.png
image.png
可以看到,如果带了域名访问,就可以,但是直接访问ip地址.就报错了

  1. method:
  2. 只有指定请求才可以路由,比如get请求...

image.png

  1. path:
  2. 只有访问指定路径,才进行路由
  3. 比如访问,/abc才路由

image.png

  1. Query:
  2. 必须带有请求参数才可以访问

image.png

Filter过滤器:

image.png

生命周期:

在请求进入路由之前,和处理请求完成,再次到达路由之前

种类:

image.png
GateWayFilter,单一的过滤器
与断言类似,比如闲置,请求头,只有特定的请求头才放行,反之就过滤:
image.png
GlobalFilter,全局过滤器:

自定义过滤器:

实现两个接口
image.png
然后启动服务,即可,因为过滤器通过@COmponet已经加入到容器了
image.png
image.png

9,链路追踪:

Spring Cloud Sleuth

sleuth要解决的问题:

image.png
而sleuth就是用于追踪每个请求的整体链路
image.png

使用sleuth:

1,安装zipkin:

image.png
运行jar包
java -jar xxxx.jar
然后就可以访问web界面, 默认zipkin监听的端口是9411
localhost:9411/zipkin/
image.png一条链路完整图片:
image.png
精简版:
image.png
可以看到,类似链表的形式

2,使用sleuth:

不需要额外创建项目,使用之前的8001和order的80即可

1,修改8001

引入pom:
image.png
这个包虽然叫zipkin但是,里面包含了zpikin与sleuth
修改配置文件:
image.png

2,修改80

添加pom

与上面是一样的

添加配置:

与上面也是一样的

3,测试:

启动7001.8001,80,9411
image.png