千家信息网

SpringCloud升级2020.0.x版中OpenFeign简介与使用实现思路是怎样的

发表于:2025-11-18 作者:千家信息网编辑
千家信息网最后更新 2025年11月18日,本篇文章给大家分享的是有关SpringCloud升级2020.0.x版中OpenFeign简介与使用实现思路是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多
千家信息网最后更新 2025年11月18日SpringCloud升级2020.0.x版中OpenFeign简介与使用实现思路是怎样的

本篇文章给大家分享的是有关SpringCloud升级2020.0.x版中OpenFeign简介与使用实现思路是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

OpenFeign 的由来和实现思路

在微服务系统中,我们经常会进行 RPC 调用。在 Spring Cloud 体系中,RPC 调用一般就是 HTTP 协议的调用。对于每次调用,基本都要经过如下步骤:

  • 找到微服务实例列表并选择一个实例

  • 调用参数序列化

  • 使用 Http 客户端将请求发送出去

  • 响应处理,反序列化等等

除了这些公共逻辑,业务上只需要定义参数,HTTP 方法,HTTP URI,响应就可以,也就是使用接口就能定义:

interface HttpBin {    @Get(uri = "/get")    String get(@Param("param") String param);}

例如上面这个接口,就定义了一个 HTTP 请求,HTTP 方法为 GET,路径是 /get,参数是 param,响应为 String 类型。之后只要定义好公共逻辑,就能使用这个接口进行调用了。

对于这些公共逻辑的实现设计,我们很自然的就能想到切面与动态代理。之前的章节,我们提到过 JDK 中有针对接口的动态代理,其实就是实现 java.lang.reflect.InvocationHandler 然后针对这个接口实现代理类。之后使用这个代理类进行调用即可走入 InvocationHandler 中定义的逻辑。

以上,就是 OpenFeign 的设计实现思路与用途。

OpenFeign 简介

OpenFeign 是一个基于声明式(通过类元数据定义,例如注解等)定义的 HTTP 请求客户端。这个库可以让你通过注解来自动生成调用对应 HTTP 服务的客户端,从代码上看调用这个远程服务和调用本地服务方法一样。OpenFeign 支持多种 HTTP 注解,包括 Feign 注解和 JAX-RS 注解,并且可以通过配置类似于插件的形式支持不同种类的注解。同时,还可以配置编码器,解码器,来编码请求并解码响应。底层的 HTTP Client 也是可以配置的,你可以使用 Java 原生的 Http 链接,也可以使用 Apache HttpClient 还有 OkHttpClient 等等。

目前 OpenFeign 还在不断迭代更新中,可以通过这个链接查看当前的 RoadMap。当前我们使用的是 OpenFeign 11,当前实现中或者计划中的特性包括:

  • 响应缓存,支持进程内或者跨进程响应缓存(实现中)

  • 实现更完善的 URI 模板支持(实现中)

  • 重构 Logger 日志 API(实现中)

  • 重构 Retry 重试 API(实现中)

  • 采集指标相关 API(下一步要实现)

  • 通过 CompletableFuture 作为基础类,实现异步 API(当前已经有基本实现,下一步完整实现)

  • 响应式 API (下一步要实现)

  • 断路器相关支持(计划中)

OpenFeign 基本使用

我们先来看 OpenFeign 的使用,先不关心 Spring Cloud 环境下如何使用,这样更能理解其底层原理。单独使用 OpenFeign 分以下几步:

  1. 定义远程 HTTP 调用 API 接口

  2. 创建 Feign 代理的 HTTP 调用接口实现

  3. 使用代理类进行调用

具体例子是:

interface GitHub {    /**     * 定义get方法,包括路径参数,响应返回序列化类     * @param owner     * @param repository     * @return     */    @RequestLine("GET /repos/{owner}/{repo}/contributors")    List contributors(@Param("owner") String owner, @Param("repo") String repository);    /**     * 响应体结构类     */    class Contributor {        String login;        int contributions;        public Contributor() {        }        public String getLogin() {            return login;        }        public void setLogin(String login) {            this.login = login;        }        public int getContributions() {            return contributions;        }        public void setContributions(int contributions) {            this.contributions = contributions;        }    }}public static void main(String[] args) {    //创建 Feign 代理的 HTTP 调用接口实现    GitHub github = Feign.builder()                        //指定解码器为 FastJsonDecoder                        .decoder(new FastJsonDecoder())                        //指定代理类为 GitHub,基址为 https://api.github.com                        .target(GitHub.class, "https://api.github.com");    List contributors = github.contributors("OpenFeign", "feign");}/** * 基于 FastJson 的反序列化解码器 */static class FastJsonDecoder implements Decoder {    @Override    public Object decode(Response response, Type type) throws IOException, DecodeException, FeignException {        //读取 body        byte[] body = response.body().asInputStream().readAllBytes();        return JSON.parseObject(body, type);    }}

在上面这个例子中,我们定义了访问 GET https://api.github.com/repos/{owner}/{repo}/contributors 这个接口的 OpenFeign 客户端,并自定义了响应解码器,反序列化了响应体。这就是 OpenFeign 的基本使用。

我们这一节详细介绍了 OpenFeign 的设计思路以及 RoadMap,了解这些之后,我们再来详细分析 Openfeign,就能理解其中的一些设计以及使用思路了。并且某些重构中的特性,我们在使用中需要格外注意,不过也不必担心,因为在 Spring Cloud 中使用 OpenFeign 的特性都是通过加入胶水项目依赖实现的,底层 API 重构是胶水项目需要关心的事情。

以上就是SpringCloud升级2020.0.x版中OpenFeign简介与使用实现思路是怎样的,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

接口 代理 思路 注解 就是 序列 支持 参数 客户 客户端 方法 解码器 逻辑 服务 设计 重构 简介 底层 特性 配置 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 奉贤区品质软件开发代理品牌 深圳市金思软件开发 荥阳管理软件开发 服务器处理器有辐射吗 上海网络安全宣传周 软件开发与应用考试题 国家网络安全第三方检测机构 灵武app软件开发怎么样 嵌入式服务器管理错误 2网络安全绘画动漫 做学校软件开发的公司 违反网络安全法不计入诚信档案 装配式网络技术厂家现货 企业软件开发没有成本票 安装数据库时显示catalog 河西区信息网络技术服务至上 学软件开发哪里有网课 数据库字段连接 软件开发后端汇报工作的内容 广州启橙网络技术有限公司 网络安全皮影戏宣传短片 服务器每次启动都要自动修复 服务器上有安全配置 软件开发开增值税票 西藏信息化土地资产管理软件开发 rpm命令的缓存数据库 计算机网络技术自我简介 没有服务器的系统怎么做等保 易语言实时获取数据库数据 oracle数据库并发量
0