SpringCloudFeign原理剖析

本文详细介绍了SpringCloudFeign的工作原理,包括Feign的注解使用、动态注册、FactoryBean的应用、服务配置、日志配置和服务降级。Feign简化了微服务间的调用,通过声明式接口定义,并利用Ribbon做负载均衡和Hystrix进行服务熔断。文章深入探讨了@EnableFeignClients和@FeignClient的用途,解析了Feign如何基于Spring Bean的动态注册生成代理类。
摘要由CSDN通过智能技术生成
Feign是什么?

简单来说,feign是用在微服务中,各个微服务间的调用。它是通过声明式的方式来定义接口,而不用实现接口。接口的实现由它通过spring bean的动态注册来实现的。

feign让服务间的调用变得简单,不用各个服务去处理http client相关的逻辑。并且它里面集成了ribbon用来做负载均衡,通过集成了hystrix用来做服务熔断和降级。

在feign的使用中,我们主要用到它的两个注解,下面一一来说明。

注解

1、@EnableFeignClients
  • 用于表示该客户端开启Feign方式调用

  • 创建一个关于FeignClient的工厂Bean,这个工厂Bean会通过@FeignClient收集调用信息(服务、接口等),创建动态代理对象

2、@FeignClient

负责标识一个用于业务调用的Client,给FactoryBean提供创建代理对象,提供基础数据(类名、方法、服务名、URI等),作用是提供这些静态配置

实现原理

一般对于一个spring boot服务来说,如果要使用feign,都会这样定义:

@Configuration
@EnableScheduling
@EnableDiscoveryClient
@EnableFeignClients(value = {"com.ts"})
@MapperScan(value = {"com.ts.xx.xx"}, nameGenerator = FullBeanNameGenerator.class)
public class xxxxAutoConfig {
}

这里就使用到了上面说的EnableFeignClients这个注解,这个注解有什么用呢?我们进入该注解:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Import(FeignClientsRegistrar.class)
public @interface EnableFeignClients {}

可以看到该注解导入了FeignClientsRegistrar类,我们进入其中:

class FeignClientsRegistrar
    implements ImportBeanDefinitionRegistrar, ResourceLoaderAware, EnvironmentAware {}
  @Override
  public void registerBeanDefinitions(AnnotationMetadata metadata,
      BeanDefinitionRegistry registry) {
    registerDefaultConfiguration(metadata, registry);
    registerFeignClients(metadata, registry);
  }  

整个过程大概就是,通过配置类,或者package路径做扫描,收集FeignClient的静态信息,每个Client会把他的基本信息,类名、方法、服务名等绑定到FactoryBean上,这样就就具备了生成一个动态代理类的基本条件。

这里穿插2个知识点

1、spring bean的动态注册

在spring中有两类bean:

  • 普通的bean:通过xml配置或者注解配置

  • 工厂bean:也是一个Bean,这个Bean我们业务中不会直接用到,它主要是用于生成其他的一些Bean,内部进行了高度封装,非常容易实现配置化的管理,屏蔽了实现细节。动态注册是解决什么问题,根据客户端的配置动态的,也就是可以按需做bean的注册。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值