FeignClient-调用流程

调用流程

首先请求会被FeignInvocationHandler 进行拦截,然后dispatch找到应的方法进行调用。
在这里插入图片描述
MethodHandler我们看看:
在这里插入图片描述
在接口断点会进入下面这个类:
在这里插入图片描述
我们可以看到是通过RestTemplage实现的,并且里面有Retryer重试机制。然后方法走到executeAndDecode
在这里插入图片描述
在下面这个方法使用了拦截器:
在这里插入图片描述
那么拦截器从那里来呢?看是从配置里来的config里面配置拦截器。
在这里插入图片描述
好我们继续看拦截器以后的逻辑,可以看到通过Client调用了execute方法,Client的类型是LoadBalancerFeignClient。
在这里插入图片描述
那么为什么会是LoadBalancerFeignClient类型呢,是因为在创建对象的时候就是LoadBalancerFeignClient
在这里插入图片描述

好继续往下走看执行逻辑,可以看到使用了Ribbon,这也验证了Feign是基于Ribbon的:
在这里插入图片描述
然后我们继续看lbClient这个方法:
在这里插入图片描述

在这里插入图片描述
这个方法就是创建LoadBalancer并且将它缓存起来。

接着我们继续看:
在这里插入图片描述
继续跟踪会执行:
在这里插入图片描述
注意这个selectServer(),继续追综:
在这里插入图片描述
这块就非常的关键了ILoadBalancer,这个ILoadBalancer哪里来的呢?

在这里插入图片描述
我们可以看到ServerList这个时候就和Ncaos进行打通了,
在这里插入图片描述
这个时候调用的时候会根据负载均衡策略选择一台服务进行调用。但是这里有个疑问,Ribbon也有这个配置,那么是怎么做到使用了Nacos的实现呢?
在这里插入图片描述
然后我找源码找到了下面这个@RibbonClients(defaultConfiguration = NacosRibbonClientConfiguration.class)这里就指定了默认的NacosRibbonClientConfiguration实现是nacos的。

@Configuration(proxyBeanMethods = false)
@EnableConfigurationProperties
@ConditionalOnBean(SpringClientFactory.class)
@ConditionalOnRibbonNacos
@ConditionalOnNacosDiscoveryEnabled
@AutoConfigureAfter(RibbonAutoConfiguration.class)
@RibbonClients(defaultConfiguration = NacosRibbonClientConfiguration.class)
public class RibbonNacosAutoConfiguration {

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值