Feign的调用原理及其源码分析

LD is tigger forever,CG are not brothers forever, throw the pot and shine.
Modesty is not false, solid is not naive, treacherous but not deceitful, stay with good people, and stay away from poor people.
talk is cheap, show others the code,Keep progress,make a better result.

目录

概述

Feign的调用原理及其源码分析
1.Feign Client 如何被加载到 Spring 中的
2.Fegin接口代理对象是如何交给Spring管理的
3.Feign是如何进行服务调用的
4.是如何整合Ribbon实现负载均衡的

架构特性

定义好接口,在integration层的接口中,用@FeignClient进行注解

设计思路

在Application入口,用@EnableFeignClients注解。

实现思路分析

先从注解 @EnableFeignClients 入手。其有一个@Import注解,引入的是FeignClientsRegistrar。从名字可看出,他应该就是把FeignClient注解的对象注入到Spring容器的类。

看其对接口ImportBeanDefinitionRegistrar的实现:

@Override
public void registerBeanDefinitions(AnnotationMetadata metadata,
            BeanDefinitionRegistry registry) {
    registerDefaultConfiguration(metadata, registry);
    registerFeignClients(metadata, registry);
}

方法registerDefaultConfiguration是将EnableFeignClients的默认配置进行注入,如果有的话。
方法registerFeignClients就是对所有有FeignClient注解的类进行注入的过程。
我们知道FactoryBean是Bean的工厂,在获取Bean的实例的时候,实际是调用FactoryBean.getObject来得到的。
上面是对Url进行处理的过程。最下面Targeter.target最终是上面是对Url进行处理的过程。最下面Targeter.target最终是调用了Feign.newInstance(Target)。

Feign是如何进行服务调用的

Spring Cloud Feign 默认使用 HTTP 的形式进行远程服务调用。
服务provider 9527 提供接口/hello/{name}
服务consumer 9528 调用 服务provider的 hello/{name} 接口
服务consumer 通过 RestTemplate 发起 HTTP 请求调用服务 provider 接口代码如下:

@RequestMapping("/feign/hello/{param}")
public Object hello(@PathVariable String param,) throws InterruptedException {
	return  restTemplate.getForObject("http://localhost:9527/hello/" + param,String.class);
}

:使用 Feign 进行远程调用,只需定义一个 Feign 客户端,通过调用方法的形式,便可完成远程接口调用。

Feign Client 进行服务间调用分为几个步骤:

1、Spring 根据 扫描包中 使用了注解 @FeignClient 的 Feign Client 。将 Feign Client 信息抽象成为 BeanDefinition 并注册到 Spring 中。
2、在使用 @Autowired 注入 Feign Client 时,触发依赖注入,根据 Feign Client 的 BeanDefinition 信息,实例化 Feign Client ,并生成代理对象, 并放入 IOC 容器中。
3、执行调用是,调用 Feign Client 的代理对象 ReflectiveFeign.FeignInvocationHandler 的 invoke() 方法。该方法经过一系列调用拼装 RequestTemplate 请求对象,并发送请求调用,获取响应。

拓展实现

无,

相关工具如下:

实验效果:(解决思路)

分析:

小结:

主要讲述了一些Feign的调用原理及其源码分析的负载均衡,里面有许多不足,请大家指正~

参考资料和推荐阅读

1.链接: 参考资料.
2.链接: 参考资料.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

执于代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值