基于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
中请求流程大致如下图: