openfeign2.0.2与eureka2.0.2调用与联动

文章详细阐述了Feign在Spring环境中的启用过程,包括通过EnableFeignClients注解进行接口扫描,FeignClientFactoryBean的实例化,以及如何利用Ribbon进行服务调用和Eureka实现负载均衡。在调用接口时,Feign通过ReflectiveFeign.FeignInvocationHandler执行invoke方法,实现远程服务的调用。关键在于Ribbon的ILoadBalancer与Eureka的集成,使得Feign能利用Ribbon的负载均衡能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一步
注解 EnableFeignClients 与 FeignClient
EnableFeignClients 是配置去扫描路径下的接口被FeignClient注释的,因为EnableFeignClients 上有@Import(FeignClientsRegistrar.class)这个注解FeignClientsRegistrar会根据你在EnableFeignClients 上配置的路径去扫描路径下的所有接口,并判断有没有FeignClient注解,然后把他包装成FeignClientFactoryBean类型的BeanDefinitio。这里面有包含的信息有,接口类、调用服务、熔断类等信息。
等二 步
spring实例化bean
因为向容器中注入的是FeignClientFactoryBean是一个FactoryBean在实例化的时候会去调用他的getObject得到实话对象。1.得到 FeignContext 的bean 配置 编码器、日志输出器、和一些配置。2.从FeignContext 得到 Client(LoadBalancerFeignClient这个就是用来连接调用远程服务的)Client 实例化的时候传入了两bean CachingSpringLoadBalancerFactory(缓存工厂) 和 SpringClientFactory(ribbon的负载均衡等熔断的工厂)
3.生成代理对象,生成代理对象的准备工作,解析这接口把所有的方法提出来。把它拼装成SynchronousMethodHandler对象,InvocationHandlerFactory.Default类把得到的方法解析结果和接口信息做成一个jdk代理对象,ReflectiveFeign.FeignInvocationHandler这个就是代理对象 InvocationHandler。这里面包含了接口信息和方法信息。
第三步
当调用这个接口得时候,他会去调用ReflectiveFeign.FeignInvocationHandler得invoke方法
一步步得调用到远程服务。
这里为什么Feign 能用Ribbon 能用并且用到了Eureka得服务,
关键点在于 下面红色方框里面 Feign 使用了Ribbon得ILoadBalancer得对象,ILoadBalancer(RibbonClientConfiguration)要注入ServerList得对象,而Eureka(EurekaRibbonClientConfiguration)重写了ServerList bean并且优先等级要比Ribbon自己写的高,所以Feign 用 Ribbon ,Ribbon 用Eureka 达成循环。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值