feign 9.3.0 学习笔记
来源:互联网 发布:淘宝商城女装夏装 编辑:程序博客网 时间:2024/06/07 02:27
feign 9.3.0 学习笔记
概述
- 参考
- https://github.com/OpenFeign/feign
- http://hao.jobbole.com/feign/
Feign—->入口
- feign为了简化开发通过http调用
- ReflectiveFeign—->Feign
- newInstance—->用于实例的转换
完成代理主要类
- HardCodedTarget—->Target
- apply—->用于将java接口T的信息通过RequestTemplate转为Request
- Default—->InvocationHandlerFactory
- InvocationHandlerFactory提供根据反射方法创建调用处理器
- FeignInvocationHandler—->InvocationHandler(负责中转java代理对象方法调用到对应的MethodHandler处理器上)
- SynchronousMethodHandler—->MethodHandler
- MethodHandler提供方法级别的调用处理器
- SynchronousMethodHandler提供同步的方法调用支持
- feign.SynchronousMethodHandler#executeAndDecode—->完成最终的方法转换、调用、响应解析
java接口注解支持
- RequestLine—->请求行,包含路径、查询参数、http方法、协议版本
- Param—->参数注解,用于请求行、body、消息头
- Headers—->消息头支持
- Body—->消息体支持
MethodMetadata—->存放java接口方法的注解、参数注解、参数信息
RequestTemplate—->请求模板,用于根据解析的java信息转换为请求对象
- feign.RequestTemplate#request
基础支持—->协议、编解码、日志
- Contract—->用于定义哪些注解以及值是有效的
- Default—->BaseContract—->Contract
- parseAndValidatateMetadata解析相关注解,产生MethodMetadata信息
- processAnnotationOnClass/processAnnotationOnMethod/processAnnotationsOnParameter3个方法解析相关注解
- Encoder—->将java对象转为http请求体
- GsonEncoder—->Encoder(利用gson进行转换)
- Decoder—->转换http响应为java对象
- GsonDecoder—->Decoder(利用gson进行转换)
- ErrorDecoder—->进行错误信息的进一步封装,响应更友好的异常信息
- Default—->ErrorDecoder
- Logger.Level
- Slf4jLogger—->feign.Logger(slf4j支持debug级别的信息输出)
http层调用支持
- OkHttpClient—->Client(进行http请求提交,解析相应响应信息)
- Default—->Retryer(重试机制支持)
测试
- feign.example.github.GitHubExample为例,数据流如下
- feign.example.github.GitHubExample.GitHub#connect—->生成java接口的代理对象(第一步)
- Feign.builder—->通过生成器模式创建ReflectiveFeign子类,设置decoder/errorDecoder/logger以及target与url
- feign.ReflectiveFeign.ParseHandlersByName#apply—->用于产生java接口相关方法的处理器(核心方法)
- 通过此方法利用Contract解析java接口的注解信息,转换为MethodMetadata,
- 通过对MethodMetadata信息的解析,构造MethodHandler
- feign.ReflectiveFeign#newInstance(通过调用此方法返回GitHub接口的代理类)
- github.contributors—->java接口调用(第二步)
- feign.ReflectiveFeign.FeignInvocationHandler#invoke—->代理对象回调处理器
- dispatch.get(method).invoke(args)—->获取到方法处理器进行方法调用
- feign.SynchronousMethodHandler#invoke
- buildTemplateFromArgs.create—->创建RequestTemplate
- targetRequest—->创建Request
- client.execute—->利用client执行请求
- feign.SynchronousMethodHandler#decode—->解析响应
- feign.example.github.GitHubExample.GitHub#connect—->生成java接口的代理对象(第一步)
阅读全文
0 0
- feign 9.3.0 学习笔记
- Feign学习笔记1-实战
- Feign学习笔记3-feign不使用eureka
- Feign学习笔记2-源码解读
- springcloud学习笔记三:利用Feign编写客户消费端
- 《SpringCloud微服务实战》学习笔记之Feign
- Feign
- Feign
- SpringCloud学习笔记之Feign结合Hystrix实现服务容错保护
- 06.Spring Cloud学习笔记之声明式服务调用组件Feign
- spring-cloud-feign之spring-cloud-1.3.4(Dalston.SR3)-boot(1.5.6) 学习笔记
- springcloud学习(四)之Feign
- Spring cloud 学习(二)Feign
- SpringCloud学习:Eureka、Ribbon和Feign
- SpringCloud学习:Eureka、Feign(含示例代码)
- SpringCloud 学习记录(一):服务注册与发现(eureka+feign)
- Spring Cloud学习系列第二章:使用Feign调用服务
- Spring Cloud学习--声明式调用(Feign)
- SpringMVC笔记
- 石子合并(四边形优化第一题)
- EF更新错误:一个实体对象不能由多个 IEntityChangeTracker 实例引用
- memcached 操作
- JS 性能提升
- feign 9.3.0 学习笔记
- Codeforces 844 C Sorting by Subsequences(离散+dfs+排序)
- 310
- 311
- 312
- 313
- 相对路径绝对路径分析
- 霍夫变换圆形检测(基于OpenCV&Python)
- 人脸检测 各种 demo/api体验