RPC框架组件openFeign原理解析

目录

前言

一、调用关系型图

二、了解此文时,需要掌握的知识点

1.factoryBean的作用

2.@Import的注解的作用,springboot的自动装配原理里面就有这个

3.jdk动态代理

三、进入源码

1.项目启动初始化相关资源,将代理对象初始化

2.方法调用

总结


前言

OpenFeign是是一个基于Http协议的RPC组件

1.如果你以前在工作中经常碰到feign调不通,日志还看不出什么原因

2.如果你不知道怎么扩展服务与服务之间的调用feign,服务间的接口签名等

3.如果你发现服务与服务间的断路器不起作用,还找不到原因

这篇文章能帮助你从底层源码了解feign内部是怎么实现的,相信看完这篇文章,在工作中碰到的服务间的调用问题,就不再是问题


一、调用关系型图

 

二、了解此文时,需要掌握的知识点

1.factoryBean的作用

FactoryBean是一个工厂Bean,可以生成某一个类型Bean实例,它最大的一个作用是:可以让我们自定义Bean的创建过程。FactoryBean本质就是用来给我们实例化、或者动态的注入一些比较复杂的Bean,比如像一些接口的代理对象

public interface FactoryBean<T> {

	String OBJECT_TYPE_ATTRIBUTE = "factoryBeanObjectType";

	
	@Nullable
	T getObject() throws Exception;
	
	default boolean isSingleton() {
		return true;
	}

}

当我们执行applicationContext.getBean(FactoryBeanService.class);最终会走到getObject方法

2.@Import的注解的作用,springboot的自动装配原理里面就有这个

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

	String[] value() default {};

	String[] basePackages() default {};

	Class<?>[] basePackageClasses() default {};

	Class<?>[] defaultConfiguration() default {};

	Class<?>[] clients() default {};

}

3.jdk动态代理

动态代理是通过创建代理对象,在不改变原有代码的基础上,给程序增加新的功能,实现了程序的功能增强

 InvocationHandler handler = factory.create(target, methodToHandler);
    T proxy = (T) Proxy.newProxyInstance(target.type().getClassLoader(),
        new Class<?>[] {target.type()}, handler);

三、进入源码

1.项目启动初始化相关资源,将代理对象初始化

2.方法调用

 


总结

1.解读源码,需要有自己的方式方法,本人一般先脉络后细节,直接idea查看调用链,然后分析里面用到的知识点

2.openFeign分为两步,第一步是通过解析注解,组装动态代理对象,代理对象里面包含了Map<Method, MethodHandler> dispatch,第二部当调用目标对象时,实际上调用的是代理对象,代理对象从dispatch里面获取到methodHandler,然后调用发送http请求框架,发送请求

3.RequestInterceptor此接口为请求发送前拦截器,用来做个性化需求

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值