基于Zuul1.3.1RELEASE进行分析,代码:https://github.com/tryandcatch/zuul
当一个请求到达Zuul的时候首先会经过一系列的 Filter(这里的Filter是Servlet下的)然后进入到DispatchServlet的doDispatch方法:
1 | protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception { |
getHandler()方法主要是根据请求遍历handlerMappings,调用HandlerMapping的getHandler()方法(HandlerMapping是个接口,在这里实际是调用的AbstractHandlerMapping的getHandler()方法),找出能够处理该请求的handler(HandlerExecutionChain)。
AbstractHandlerMapping的getHandler()方法:
1 | public final HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception { |
HandlerMapping、AbstractHandlerMapping、SimpleUrlHandlerMapping、ZuulHandlerMapping之间的关系:


AbstractUrlHandlerMapping的getHandlerInternal方法:
1 | protected Object getHandlerInternal(HttpServletRequest request) throws Exception { |
Zuul中请求流程大致如下图:
