Fegin-完整请求流程解析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Fegin-完整请求流程解析相关的知识,希望对你有一定的参考价值。

参考技术A 这一章说说基于Fegin的声明式调用请求是怎么个流程

首先我们从构建流程中知道,大体上来说是基于JDK的动态代理机制实现的,那么在JDK的动态代理中,对方法进行增强的类就是InvocationHandler,核心方法就是invoke(),在Fegin中就是FeignInvocationHandler

我们看看这个类

真正执行的Method是解析好的SynchronousMethodHandler,args是请求的方法参数,从这里看出,真正执行的是构建的
SynchronousMethodHandler

进入SynchronousMethodHandler#invoke方法中

我们知道在targetToHandlersByName.apply(target)方法中将接口的注解参数使用SpringMvcContract解析生成MethodMetadata,其中就有template,在上面executeAndDecode方法,第一步是将实际的请求地址进行拼装,参数替换,最后形成的就像这样:

最后形成一个包含服务名的请求路径,是不是很眼熟,和我们在ribbon中传入的URL很像

这里方法嵌套的很多,没办法,只有一个个分析

上面excute()方的核心lbClient(clientName).executeWithLoadBalancer(ribbonRequest,
requestConfig).toResponse(),看第一个方法lbClient(clientName):

第一步是先去缓存中获取该服务对应的FeignLoadBalancer,如果没有进行创建,我们看看创建的流程

好了,lbClient(clientName)返回的是一个FeignLoadBalancer,接着执行它的executeWithLoadBalancer方法

首先这个Observable使用的是Java的rx包下面的组件,服务的选取采用selectServer,这个就是

采用Ribbon的服务选取进行的,上面那一大坨主要是对服务调用包装一些重试策略

具体的重试讲解,后续开文再说

这submit()方法,请求最终还是会回调call(Server server)方法

附上总流程图:

以上是关于Fegin-完整请求流程解析的主要内容,如果未能解决你的问题,请参考以下文章

用户访问网站的完整流程

用户访问网站的完整流程

谢烟客---------Linux之DNS请求流程及资源记录定义

MapReduce详细解析完整流程

Vue Router 路由守卫:完整的导航解析流程

一个完整的HTTP请求过程详细