微服务中的网关
网关统一了服务之间的调用,协调了彼此之间的请求处理,服务网关 = 路由转发 + 过滤器
详情参考:为什么微服务一定要有网关?
网关的职责:
统一入口
鉴权校验
动态路由
解耦
一、网关服务入门案例
1.新建项目,修改pom.xml文件,配置Zuul依赖
2.修改application.properties/yml配置文件,配置应用名,端口,配置Eureka服务中心地址
3.修改启动类,添加@EnableZuulProxy注解,开启Zuul网关代理服务
4.启动测试,随便启动一个服务(在Eureka注册),然后启动网关服务,访问的时候就可以通过网关调用
保证被访问的服务是启动状态
http://网关ip:端口/访问服务应用名/服务暴露API
二、网关路由中的路由规则
1.URL指定规则:URL匹配关键字,如果包含关键字就跳转到指定的URL中
2.服务指定规则:
方式一、
规则:
zuul.routes.路径名.path=访问路径
zuul.routes.路径名.serviceId=eureka的服务名
方式二、
规则:
zuul.routes.服务应用名. path=访问路径(推荐)
3.排除服务/多个服务规则:排除某几个服务
添加前缀的格式:zuul.prefix=前缀名
常见的通配符标识的含义
?:标识在 …/服务名/匹配单个字符
* :标识在 …/服务名/匹配多个字符,但无法匹配 ..服务名/../..
* *:标识在 …/服务名/匹配多个字符,可以匹配 ..服务名/../..
三、路由规则
自定义过滤规则,实现简易的登录过滤器
相同类型的过滤器,filterOrder方法的返回值越小,优先级越高
1.创建项目,添加Zuul的依赖
2.配置applicaiton.properties/yml全局配置文件,修改应用名,端口,注册中心服务地址等
3.编写普通类继承ZuulFitler抽象类,并重写其方法,成为自定义过滤器,指定过滤规则、参数等信息
ZuulFilter:是一个抽象类,继承该类并重写方法会自动变成一个zuul网关的过滤器。
常见的过滤器类型:
FilterType:在Zuul中默认定义了四种不同的过滤器类型,用字符串表示
pre:可以在请求被路由之前调用
routing:在路由执行之后被调用
post:在routing和error过滤器之后被调用
error:当处理请求发生错误时被调用
4,修改启动类,添加@EnableZuulProxy注解开启Zuul网关代理服务
四、Zuul的请求生命周期
当HttpRequest对象发起请求时,会先到Pre类型的过滤器中处理相关规则
if(pre处理正常){
到routing类型的过滤器中执行规则
if(routing处理正常){
调用Provider中的服务
处理post过滤器
}else{
到Error过滤器中处理异常
处理post过滤器
}
}else{
到Error过滤器中处理异常
处理post过滤器
}
个人理解,有不妥请自行:www.baidu.com
五、多网关过滤器的执行顺序和、采用网关过滤器对系统异常统一处理
1.创建项目.....
2.定义不同类型的网关过滤器,并在pre类型中抛出一个自定义异常
AccessFilter过滤器
AccessFilter2过滤器
ErrorFilter过滤器
PostFilter过滤器
3.Spring Boot内置的Web容器启动后,一旦遇到异常会寻找路径为“/error”的异常处理地址
4.我们可以自定义异常页面,从而进行统一异常处理
5.访问测试:控制台展示
6.web展示页面
可以根据需求不同编写不同的处理规则