springcloud zuul

zuul是springcloud的API网关。

入口也是springmvc的DispatcherServlet。

 实际的handler是ZuulController,通过handleRequest方法调用了ZuulServlet的service方法来处理请求。

ZuulServlet就是一个普通的servlet,其service方法如下:

@Override
public void service(javax.servlet.ServletRequest servletRequest, javax.servlet.ServletResponse servletResponse) throws ServletException, IOException {
try {
init((HttpServletRequest) servletRequest, (HttpServletResponse) servletResponse);

// Marks this request as having passed through the "Zuul engine", as opposed to servlets
// explicitly bound in web.xml, for which requests will not have the same data attached
RequestContext context = RequestContext.getCurrentContext();
context.setZuulEngineRan();

try {
preRoute(); //pre ZuulFilter在这里调用

} catch (ZuulException e) {
error(e);
postRoute();
return;
}
try {
route(); //这里做路由
} catch (ZuulException e) {
error(e);
postRoute(); //post ZuulFilter在这里调用
            return;
}
try {
postRoute(); //post ZuulFilter在这里调用

} catch (ZuulException e) {
error(e);
return;
}

} catch (Throwable e) {
error(new ZuulException(e, 500, "UNHANDLED_EXCEPTION_" + e.getClass().getName()));
} finally {
RequestContext.getCurrentContext().unset();
}
}
 
原文地址:https://www.cnblogs.com/fsqsec/p/8342188.html