一:特点:
路由+过滤器=Zuul
核心为一系列的过滤器
二:前置过滤器(Pre)作用:
1.限流(流量过大时,依据某种规则把请求挡回去,后续的逻辑就不在处理了)
2.鉴权(如果发现没有访问权限,直接就拦截了 )
3.参数检验调整
三:后置过滤器(Post)
1.统计
2.日志
四:异常处理器(error)
一般会在error类型和post类型过滤器中结合来处理。
服务调用时长统计:pre和post结合使用。
---------------------------------
在配置文件中的配置
server:
port: 10010 #服务端口
spring:
application:
name: api-gateway #指定服务名
zuul:
routes:
service-provider: # 这里是路由id,随意写
path: /service-provider/** # 这里是映射路径
url: http://127.0.0.1:8081 # 映射路径对应的实际url地址
我们将符合path
规则的一切请求,都代理到 url
参数指定的地址
本例中,我们将 /service-provider/**
开头的请求,代理到http://127.0.0.1:8081
同一服务有多个实例的话,服务网关项目中加入eurekaClient后
zuul:
routes:
service-provider: # 这里是路由id,随意写
path: /service-provider/** # 这里是映射路径
serviceId: service-provider # 指定服务名称
---------------------------
路由前缀
配置示例:
zuul: routes: service-provider: /service-provider/** service-consumer: /service-consumer/** prefix: /api # 添加路由前缀
我们通过zuul.prefix=/api
来指定了路由的前缀,这样在发起请求时,路径就要以/api开头。
--------------------------------------------
过滤器执行生命周期
这张是Zuul官网提供的请求生命周期图,清晰的表现了一个请求在各个过滤器的执行顺序。
正常流程:
-
请求到达首先会经过pre类型过滤器,而后到达route类型,进行路由,请求就到达真正的服务提供者,执行请求,返回结果后,会到达post过滤器。而后返回响应。
异常流程:
-
整个过程中,pre或者route过滤器出现异常,都会直接进入error过滤器,在error处理完毕后,会将请求交给POST过滤器,最后返回给用户。
-
如果是error过滤器自己出现异常,最终也会进入POST过滤器,将最终结果返回给请求客户端。
-
如果是POST过滤器出现异常,会跳转到error过滤器,但是与pre和route不同的是,请求不会再到达POST过滤器了。