5,服务网关:
13,GateWay
gateway之所以性能好,因为底层使用WebFlux,而webFlux底层使用netty通信(NIO)
GateWay的特性:
GateWay与zuul的区别:
zuul1.x的模型:
什么是webflux:
GateWay的一些概念:
1,路由:
路由是构建网关的基本模块,它由ID,目标URI,一系列的断言和过滤器组成,如果断言为true则匹配该路由
就是根据某些规则,将请求发送到指定服务上
2,断言:
3,过滤:
GateWay的工作原理:
使用GateWay:
新建一个GateWay的项目
名字: cloud_gateway_9527
1,pom
2,配置文件
3,主启动类
4,针对pay模块,设置路由:
我们目前不想暴露8001端口,希望在8001外面套一层9527
修改GateWay模块(9527)的配置文件:
这里表示,
当访问localhost:9527/payment/get/1时,
路由到localhost:8001/payment/get/1
5,开始测试
启动7001,8001,9527
如果启动GateWay报错
可能是GateWay模块引入了web和监控的starter依赖,需要移除
访问:
localhost:9527/payment/get/1
6,GateWay的网关配置,
**GateWay的网关配置,除了支持配置文件,还支持硬编码方式**
7使用硬编码配置GateWay:
创建配置类:
8,然后重启服务即可
重构:
上面的配置虽然首先了网关,但是是在配置文件中写死了要路由的地址
现在需要修改,不指定地址,而是根据微服务名字进行路由,我们可以在注册中心获取某组微服务的地址
需要:
1个eureka,2个pay模块
修改GateWay模块的配置文件:
然后就可以启动微服务.测试
Pridicate断言:
我们之前在配置文件中配置了断言:
这个断言表示,如果外部访问路径是指定路径,就路由到指定微服务上
可以看到,这里有一个Path,这个是断言的一种,断言的类型:
After:
可以指定,只有在指定时间后,才可以路由到指定微服务
这里表示,只有在2020年的2月21的15点51分37秒之后,访问才可以路由
在此之前的访问,都会报404
如何获取当前时区?**
before:
与after类似,他说在指定时间之前的才可以访问
between:
需要指定两个时间,在他们之间的时间才可以访问
cookie:
只有包含某些指定cookie(key,value),的请求才可以路由
Header:
只有包含指定请求头的请求,才可以路由
host:
只有指定主机的才可以访问,
比如我们当前的网站的域名是www.aa.com
那么这里就可以设置,只有用户是www.aa.com的请求,才进行路由
可以看到,如果带了域名访问,就可以,但是直接访问ip地址.就报错了
method:
只有指定请求才可以路由,比如get请求...
path:
只有访问指定路径,才进行路由
比如访问,/abc才路由
Query:
必须带有请求参数才可以访问
Filter过滤器:
生命周期:
种类:
GateWayFilter,单一的过滤器
与断言类似,比如闲置,请求头,只有特定的请求头才放行,反之就过滤:
GlobalFilter,全局过滤器:
自定义过滤器:
实现两个接口
然后启动服务,即可,因为过滤器通过@COmponet已经加入到容器了
9,链路追踪:
Spring Cloud Sleuth
sleuth要解决的问题:
使用sleuth:
1,安装zipkin:
运行jar包
java -jar xxxx.jar
然后就可以访问web界面, 默认zipkin监听的端口是9411
localhost:9411/zipkin/
一条链路完整图片:
精简版:
可以看到,类似链表的形式
2,使用sleuth:
不需要额外创建项目,使用之前的8001和order的80即可
1,修改8001
引入pom:
这个包虽然叫zipkin但是,里面包含了zpikin与sleuth
修改配置文件:
2,修改80
添加pom
与上面是一样的
添加配置:
与上面也是一样的
3,测试:
启动7001.8001,80,9411