资料总结 资料总结
首页
go
java
云原生
  • mysql
  • redis
  • MongoDB
  • 设计模式详解
  • 数据结构与算法
  • 前端
  • 项目
  • 理论基础
  • 运营
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

linghui Wu

一只努力学飞的鱼
首页
go
java
云原生
  • mysql
  • redis
  • MongoDB
  • 设计模式详解
  • 数据结构与算法
  • 前端
  • 项目
  • 理论基础
  • 运营
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • java-se

  • jvm

  • mybatis

  • Netty

  • 爬虫 webmagic

  • spring

  • spring-cloud

    • alibaba

    • Netflix

      • Feign
        • 建议:
          • Feign接口扩展点
          • Spring-cloud 的OpenFeign扩展点
          • 源码解析
        • 执行Feign执行的主要过程:
          • 运用到的设计模式
          • 项目结构
          • 参考资料
      • Ribbon
    • spring

  • 中间件

  • flowable

  • idea工具

  • maven

  • ms

  • java部署

  • 原生安卓

  • java
  • spring-cloud
  • Netflix
wulinghui
2022-01-21
目录

Feign

# 高级用法

  • 整合熔断器,利用的重试接口和自定义client

  • 日志配置 > 可以局部,也可以全局

  • 契约配置 > 默认是支持springmvc,还可以修改支持原生的注解

  • 拦截器> 可以实现身份认证

  • 超时时间配置

和ribbon整合以feign为准,但是RestTemplate还是ribbon的配置.

  • 客户端组件配置 :利用Client 自定义其他协议扩展 ;
  • 可以切换 Apache HttpClient,OkHttp等等;还可以改成RPC等其他协议。
  • 开启GZIP 压缩配置
  • 编码器解码器配置
  • openFeign整合dubbo (opens new window)

# 建议:

  • 不要配置全局配置,使用yml配置文件中配置每个服务配置

  • 开启GZIP

# Feign接口扩展点

  • Contract : 解析和校验注解,获得元数据集合
  • InvocationHandlerFactory : 生成动态代理对象
  • feign.InvocationHandlerFactory.MethodHandler : 真正执行代理对象的invoke方法.
  • feign.Logger: 可以记录执行的各个阶段的日志,比如失败后、执行后的结果.
  • Retryer: 重试的操作
  • RequestInterceptor : 拦截器,用于扩展Request
  • Client : 真正执行远程调用.
  • Encoder、Decoder、ErrorDecoder : 请求序列化、正常响应反序列化

# Spring-cloud 的OpenFeign扩展点

  • Targeter : 创建的动态代理入口
  • FeignClientFactoryBean : 本身的Feign
  • FeignContext : 上下文用于创建相关的Bean

# 源码解析

可以看到和ribbon整合,只是用了ribbon的选择service,其他的配置还是以feign为主的。

# 执行Feign执行的主要过程:

  1. Contract : 根据接口类的注解,解析MethodMetadata
  2. InvocationHandlerFactory: 生成代理对象
  3. MethodHandler : 执行代理对象的invoke方法
  4. Encoder: 编码
  5. RequestInterceptor : 拦截器额外增强
  6. 获得Request
  7. Client 执行调用
  8. Decoder、ErrorDecoder : 反序列化并返回结果对象

# 运用到的设计模式

责任链模式 RequestInterceptor
建造者模式 Feign.builder() , Response.builder()
代理模式 jdk代理
门面模式 Client

# 项目结构

Feign 和 spring mvc 要定义2遍? 不需要...

/**
 * @author qinkaiyuan
 * @date 2019-09-28 11:09
 * 前端初始化内容
 */
@RequestMapping("app")
@FeignClient(name = "app", url = "${socialuni.server-url:https://api.socialuni.cn}")
public interface SocialuniAppAPI {
    @PostMapping("getAppLaunchData")
    ResultRO<SocialAppLaunchDataRO> getAppLaunchData();

    @PostMapping("queryHomeSwipers")
    ResultRO<List<HomeSwiperVO>> queryHomeSwipers();

    @PostMapping("sendErrorLog")
    ResultRO<Void> sendErrorLog(@RequestBody @Valid FrontErrorLogVO frontErrorLogVO);
}




/**
 * @author qinkaiyuan
 * @date 2019-09-28 11:09
 * 前端初始化内容
 */
@RestController
public class AppController implements SocialuniAppAPI {
    @Resource
    SocialuniAppAPI socialuniAppAPI;
    @Resource
    AppService appService;

    @Override
    public ResultRO<SocialAppLaunchDataRO> getAppLaunchData() {
        return socialuniAppAPI.getAppLaunchData();
    }

    @Override
    public ResultRO<List<HomeSwiperVO>> queryHomeSwipers() {
        return appService.queryHomeSwipers();
    }

    @Override
    public ResultRO<Void> sendErrorLog(FrontErrorLogVO frontErrorLogVO) {
        return appService.sendErrorLog(frontErrorLogVO);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48

# 参考资料

  • Feign 和 OpenFeign 两者区别 (opens new window)

  • Feign的git地址 (opens new window)

  • Feign 官方文档翻译 (opens new window)

  • feign自定义请求拦截器、编码器、解码器 (opens new window)

  • Feign的工作原理 (opens new window)

  • HttpClient、OKhttp、RestTemplate接口调用对比,选择一个优秀的 HTTP Client 的重要性 (opens new window)

HttpClient 是Apache的一个三方网络框架,网络请求做了完善的封装,api众多,用起来比较方便,开发快。 OKhttp 高效的HTTP客户端,它能允许同一ip和端口的请求重用一个socket,这种方式能大大降低网络连接的时间.降低了服务器服务器的压力,透明的GZIP压缩减少响应数据的大小;缓存响应内容。对http和https都有良好的支持。对大数据量的网络请求支持非常好。 RestTemplate 提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。面向对 RESTful Web 服务调用的功能。

编辑 (opens new window)
上次更新: 2023/01/24, 15:21:15
分布式Seata原理源码
Ribbon

← 分布式Seata原理源码 Ribbon→

最近更新
01
架构升级踩坑之路
02-27
02
总结
02-27
03
语法学习
02-27
更多文章>
| Copyright © 2021-2025 Wu lingui |
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式