Spring Cloud OpeFeign原理
2021-12-18 19:26:21 0 举报
登录查看完整内容
Spring Cloud OpeFeign原理, 高清图解OpenFeign,小白也能轻松学会OpenFeign原理
作者其他创作
大纲/内容
.......
OpenFeign Framework
NamedContextFactory
getObject()
FeignInvocationHandler
$goodsServiceProxy
FeignClientFactoryBeanname:feign-client-name2
Contract协议解析规则
OpenFeign
@AutowiredIGoodsServiceFeignClient goodsService;
远程调用
MethodHandler
value: AnnotationConfigApplicationContext
OrderController
GoodsController
invoke
Feign.Builder
请求转发
Decoder
$Proxy2
RequestTemplate
IGoodsService gs; gs.getGoodsById();
@GetMapping public String order(){ goodsServiceFeignClient.getGoodsById(); }
interface#method
返回结果
gpmall-portal
Contract
Proxy.newInstance
@FeignClient(name=\"feign-client-name2\")public interface IFeignName2{}
引入OpenFeign之前的通信方式
$Proxy3
http通信
OpenFeign的整体工作原理图解
OpenFeign模版解析以及方法请求分发逻辑
Spring Cloud OpenFeign 父子容器隔离
FeignLoggerFactory
IGoodsService
dependency
Encoder
@Autowiredprivate IFeignName1 feignName1
@FeignClientpublic interface IGoodServiceFeignClient{ @RequestMapping String getGoodsById();}
@Slf4j@RestControllerpublic class GoodsServices implements IGoodsService { public String getGoodsById(){ log.info(\"receive request\"); return \"返回商品详细信息\"; }}
Spring ApplicationContext
返回
方法调用的元数据信息
client.execute
......
FeignClientFactoryBeanname:feign-client-name1
Feign接口注入
Nexus Repository
buildTemplateFromArgs.create()
FeignContext
全局对象
goods-service
key: feign-client-name2
解析
RestTemplate
解析模版
List<MethodMetadata>
deploy
注入Dynamic Proxy instance
@FeignClient(name=\"feign-client-name1\")public interface IFeignName1{}
引入OpenFeign之后的通信方式
OpenFeign接口定义
GoodsServiceImpl
Goods-Service
OKhttp
扫描@EnableFeignClient路径下的@FeignClient
goods-service-api
key: feign-client-name1
FeignClient接口
Spring IOC容器
当客户端调用动态代理的方法时,会被FeignInvocationHandler转发到方法对应的MethodHandler处理
保存到Map集合
Reqeust
targetRequest转化为真正的请求
Dispatch
保存
0 条评论
回复 删除
下一页