Open-Feign 你真的会用了吗?

[享学Feign] 一、原生Feign初体验,Netflix Feign or Open Feign? 说到HTTP客户端,大家都不会感到陌生。Java自己源生的就有`java.net`包下的`HttpURLConnection`(虽然不太好用),同时优秀的开源产品更是百花齐放: - Apache HttpClient - OkHttp - Spring的RestTemplate - 说明:它基于以上三种Client做的包装 - Feign(本专栏详述) JDK源生的偏于底层且不好用,在Java9之前你几乎可以忽略它;作为老牌的`Apache HttpClient`凭借着各种优秀特征,似乎已成为了事实的标 阅读详情

👉 这是一个或许对你有用的社群

🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料: 

521c7ccd47ce29824e7af76f5d8f01f4.gif

👉这是一个或许对你有用的开源项目

国产 Star 破 10w+ 的开源项目,前端包括管理后台 + 微信小程序,后端支持单体和微服务架构。

功能涵盖 RBAC 权限、SaaS 多租户、数据权限、商城、支付、工作流、大屏报表、微信公众号、CRM 等等功能:

  • Boot 仓库:https://gitee.com/zhijiantianya/ruoyi-vue-pro

  • Cloud 仓库:https://gitee.com/zhijiantianya/yudao-cloud

  • 视频教程:https://doc.iocoder.cn

【国内首批】支持 JDK 21 + SpringBoot 3.2.2、JDK 8 + Spring Boot 2.7.18 双版本 

来源:juejin.cn/post/
7289664651360550927


引言

现在我们在微服务开发中,由于服务拆分,我们不可避免的会涉及一个服务需要调用另一个服务的RPC场景,对于这一场景的实现有很多方案:我们可以自己封装httpclient,也可以使用RestTemplate或者Dubbo,以及我本文要讲的Open-Feign,这些都可以方便我们来完成远程调用。

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro

  • 视频教程:https://doc.iocoder.cn/video/

一、案例

首先,我们简单的实现一个Open-Feign的使用案例:

现在假设我们有这么一个场景:

我们有两个服务:认证权限服务auth-service,还有一个应用服务app-service,应用服务登入的时候需要调用认证权限服务来进行账号认证和权限校验

auth-service中有一个认证接口:

@RestController
@RequestMapping("/api)
public class AuthController {

    @GetMapping("/auth")
    public Boolean auth(@RequestBody AuthRequest authRequest){
    // 认证逻辑 ...
        return true;
    }
}

而由于我们在app-service中需要去调用auth-service的auth接口,所以我们可以使用open-feign来帮我们完成RPC的过程,我们可以这么来实现:

使用open-feign功能的几个步骤:

1.我们先需要引入maven依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2.使用@EnableFeignClients来启用Open-Feign的能力,比如可以在app-service启动项AppServiceStater上标注这个注解:

@EnableFeignClients
@SpringBootApplication
public class AppServiceStater {
    public static void main(String[] args) {
        SpringApplication.run(ServiceProviderAppStater.class, args);
    }
}

3.以接口的方式构建我们需要RPC操作的远程接口配置

比如在我们的场景下,我们需要操作认证服务auth-service的/api/auth接口,那么我们可以如下操作:

@FeignClient(name = "auth-service",url = "http://127.0.0.1:8080")
public interface AuthServiceRemoteClient {

@GetMapping(value = "/api/auth")
Boolean auth(@RequestBody AuthRequest);
}

4.注入3中写的接口并调用方法

@RestController
public class NacosController {

    @Autowired
    AuthServiceRemoteClient authServiceRemoteClient;

    @GetMapping("/app/login")
    public Boolean login(@RequestBody LoginRequest loginRequest){
        // 转换为AuthRequest auth
        AuthRequest authRequest = Convert(loginRequest);
        return authServiceRemoteClient.auth(authRequest);
    }
}

完成以上几个步骤后,当我们请求app-service的login接口的时候,内部就会调用auth-service的auth接口进行认证,整个过程还是很丝滑的。

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/yudao-cloud

  • 视频教程:https://doc.iocoder.cn/video/

二、大的思想

看完上面的案例后,相信你应该很想知道整个Open-Feign的实现是怎么样的,再了解细节之前,我们先站在上帝视角来看下这个大的思想:

1.构建过程

当项目启动的时候,Open-Feign会扫描指定的标注了@FeifnClient的注解,根据上面案例我们知道@FeignClient是标注在接口之上的,扫描到这个接口后,Open-Feign会通过JDK动态代理的方式为这个接口生成代理对象;而接口中的每一个方法都是对应了一个远程的API接口,如何在调用指定的方法就可以调到远程的指定接口呢?

这是Open-Feign在解析接口时,接口中的每个方法会被解析成MethodMetadata信息,然后再转换成MethodHandler,最终解析完所有的方法会构成一个Map<Method,MethodHandler>对象,而这个对象会作为InvocationHandler的一个属性而存在,我们都知道InvocationHandler是JDK动态代理的一个核心组件,所有被代理的对象方法调用都会走到InvocationHandler的invoke方法逻辑,下图展示了整个动态代理构建的过程:

6bd128677a3e2800bb4887ad968aa83c.jpeg

2. 调用执行过程

当已经构建好了所有的@FeignClient标注接口的代理对象时,我们调用指定的方法时,会从Map<Method,MethodHandler>对象对象中根据Method来获取指定的MethodHandler对象,然后执行其invoke方法进行真正的RPC逻辑。

9e0ac229af1de40dc9cfd570d1b2e4a9.jpeg

三、总结

本章我们仅仅描述了Open-Feign的使用案例,以及整个JDK动态代理的实现,是在一个很高的层面来看整个Open-Feign的实现原理。后面我们解析整个RPC请求的构建、执行和响应返回的整个详细逻辑,而这一切正是包含在MethodHandler对象的invoke方法之中,期待后续我们一起探索。


欢迎加入我的知识星球,全面提升技术能力。

👉 加入方式,“长按”或“扫描”下方二维码噢:

8a49cdc3058b7baf18e0321401bbb9ba.png

星球的内容包括:项目实战、面试招聘、源码解析、学习路线。

199c0e57c3c6c43425f4abecf0ce761d.png

f082e3c50ed58cda0d011dd9e95f96f4.png497d420d69b2c5cd258fe1826a7f92e6.png0397582c6606bcda096d6275010c3c86.pngc95464c089ce3b4430d4798622044a4d.png

文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
Open Feign 超时 Ribbon 超时 相关内容 文章目录Open Feign 超时 Ribbon 超时 相关内容1、默认使用 JDK 自带的 HttpURLConnection ,无连接池,性能、效率低2、Open Feign 使用 Ribbon 作为负载均衡,他同样默认使用 JDK 自带的 HttpURLConnection3、全局超时4、单服务超时5、熔断超时6、Ribbon 超时7、Open Feign 重试机制8、Ribbon 拉取服务列表9、Ribbon 重试10、Hystrix 超时11、使用 Open Feign 做 http 客户端 阅读详情

相关推荐

Open Feign 发送GET请求入参为@RequestBody时调用失败

前言 最近在优化代码,将部分码帮帮代码重写了一下,然后就发现了Open Feign 发送GET请求入参为@RequestBody时调用失败的问题! 问题重现 controller层 fegin层 这里可能有人对controller层有疑问,不是说GET只支持@PathVariable(URL入参),@RequestParam(Params入参),这里其实只是常见的,我只能说这是常规规范而已,具体的细节请看往期文章前后端分离项目VUE使用axios调用微服务SpringBoot后端接口无法获取参数,这篇文

程序员劝退师的博客 3805

OpenFeign原理及其使用方法

目录 1、OpenFeign基础 1.1、概念 1.2、作用 1.3、Feign和OpenFeign区别 2、OpenFeign使用步骤 2.1、创建Feign消费端微服务 2.2、修改POM文件配置 2.3、编写yaml配置文件 2.4、编写主启动类 2.5、编写业务类 2.5.1、编写 service 层接口,用于服务提供者接口的远程调用 2.5.2、编写 controller 层,用于url映射和service调用 2.6、测试 3、OpenFeign超时控制 3.1、超

weixin_44302046的博客 1万+

大厂面试真题10-Spring Cloud 组件 Open Feign相关问题

1、如何使用? 首先,调用以及被调用的微服务双方都应该被注册到注册中心。 Spring Boot启动APP上标注@EnableFeignClients注解。 编写远程调用接口并标注@FeignClient注解。(括号内添加所要调用的微服务名称) 接口中的方法为实际想要调用的服务的方法签名,并使用@PostMapping注解映射为一个post类型的HTTP请求。 2、实现远程调用的原理?(新浪)(百度) 核心原理就是通过一系列的封装和处理,将以Java注解的方式定义.

金蝶ERP解说 3259

芋道源码yudao-cloud 二开笔记(Feign服务调用,如何定义一个 API 接口)

在yudao-cloud如何定义一个Api接口,提供给另一个服务去调用?下面是 `yudao-module-syetem系统服务` 调用 `yudao-module-infra文件服务`的示例

qq_31676725的博客 2731

MobaXterm结合SSH密钥对安全连接阿里云ECS的实战教程

本文详细介绍了如何使用MobaXterm结合SSH密钥对安全连接阿里云ECS的实战教程。通过对比传统密码登录的风险,重点讲解了密钥对的生成与配置、阿里云控制台的密钥绑定技巧,以及MobaXterm的高级设置和故障排查方法,帮助用户实现高效、安全的远程连接。

weixin_29208327的博客 467

AI应用架构师总结:智能问答系统用户意图识别的8种方法与实践!

意图识别是智能问答系统的大脑入口,其技术水平决定了系统能否准确捕捉用户的核心诉求。本文系统剖析了从基础规则到前沿PLM的8种核心意图识别方法透明简单,冷启动快,维护成本高。中等规模场景基线,依赖特征工程。利用词义和局部/序列信息,训练成本高。当前最优精度,需大量资源。添加意图灵活,冷启动友好,精度可能略逊。提升鲁棒性,系统变复杂。解决歧义和自然交互的关键(多轮)。增强专业领域理解和推理能力。成功的意图识别模块需要:精准的意图定义(Schema)是前提!

AI云原生与云计算技术学院 1632

Spring Cloud----Open Feign

服务消费者中引入包后,可以直接用包中的接口声明的方法进行远程调用,但由于包中的接口不在默认的扫描路径下,因此我们需要自己手动去将这个接口注册到spring容器中,我们可以直接通过@EnableFeignCilent的basePackages和clients两个参数来进行注册,其中basePackages为指定去哪个包下扫描这个接口,cilents则是直接指定接口的类型。在接口里,我们需要去声明要调用的目标服务的接口方法,例如,我们这里需要去调用product-service服务,我们来看一下它里面的接口。

mr_yuanshen的博客 1356

利用Arcgis发布wmts服务

使用发布 GIS 服务连接连接到 ArcGIS Server 站点后,可以将各种 GIS 资源(如地图文档、数据库以及服务定义)发布到服务器上。此外,还可以添加、删除、启动和停止服务。使用管理 GIS 服务器连接到 ArcGIS Server 站点后,可以编辑各种服务器属性,例如配置存储位置、集群配置、参与到该站点中的计算机列表以及管理站点的数据存储。通过使用 GIS 服务连接建立连接后,可以查看并使用发布到该站点的服务。但不能编辑服务器或服务属性、发布服务,也不能添加、删除、启动、停止或暂停服务。

ghgfsasxda的博客 2395

spring boot集成open feign

spring boot集成open feign

qq1270821038的博客 1633

概率论—期末复习速成笔记(自用)

概率论期末复习

a200327的博客 2万+

论文学习:Towards Automated Infographic Design:Deep Learning-based Auto-generation of Extensible Timeline

title: “Towards Automated Infographic Design:Deep Learning-based Auto-generation of Extensible Timeline” tags: [“论文评述”, “报告”] date: 2019-08-22 author: 叶慧 mathjax: true 论文:Towards Automated Infograph...

xiaoyehahaha的博客 731

Spring Cloud 之 Open Feign

本篇主要介绍微服务远程调用的的另一种方式OpenFeign。

qq_66292058的博客 3609

Minitab正交试验设计:从入门到精通的完整指南

本文提供了一份使用Minitab进行正交试验设计的完整指南。从正交试验省时省力的原理讲起,详细介绍了在Minitab中创建正交表、填入数据、执行分析(包括解读ANOVA和P值)以及寻找最优参数组合的全流程。文章旨在帮助读者,特别是工艺优化和研发人员,快速掌握这一高效工具,从而用最少的实验次数锁定关键影响因素,提升工作效率与成果。

weixin_29201313的博客 467

SpringCloud Alibaba微服务--Open Feign的使用

本文介绍了OpenFeign的概念及使用方式。OpenFeign是一个声明式Web服务客户端,简化了远程服务调用过程。文章详细讲解了如何创建jd-shop-user服务模块,配置Nacos和Sentinel,并引入OpenFeign依赖。通过jd-shop-order和jd-shop-user两个服务模块,演示了OpenFeign的基本使用方法,包括创建Feign接口、远程调用、添加请求头信息等。还介绍了使用fallback属性进行容错处理的方法,并展示了与Sentinel的集成。

m0_74399067的博客 1110

详解电路设计中的RC电路

​ 一、什么是RC电路 RC电路是指由电阻R和电容C组成的电路,它是脉冲产生和整形电路中常用到 的电路。 常见的RC充、放电电路、RC积分电路合RC微分电路接下来详细讲解。 二、RC充、放电电路 RC充、放电电路如下图所示,下面通过充电和放电两个过程来分析此电路。 ​RC充、放电电路图 (1)RC充电电路 RC充电电路图如下图(a)所示 RC充电电路图及充电曲线图 ​由上图分析: 将上图a中开关S置于“1”处,电源E开始通过电阻R对电容C充电,由于刚开始充电时电容两端没有..

IT xiaobai 4万+

手把手教你安装 OpenClaw 小龙虾(MAC安装教程),一次成功不踩坑

本文详细介绍了在Mac上安装OpenClaw的完整流程。主要内容包括:1)准备工作(磁盘空间、网络环境、终端工具);2)安装Homebrew包管理器及常见问题解决;3)安装Node.js 22+版本(环境核心);4)Git安装与验证;5)OpenClaw项目克隆、依赖安装及运行配置;6)大模型配置方法(以MiniMax为例)。文章提供了详细的命令行操作步骤和常见错误解决方案,特别强调了网络环境要求和Apple Silicon芯片的原生支持注意事项。最后展示了验证配置成功的方法和资源获取渠道。

Chengbei11的博客 6344

Open Feign统一处理返回

之前为什么我的代码有问题?我返回的是Result没有携带任何的 信息,所以取data的时候出问题了,因为Java不知道将data转换成什么类型,强行转换也失败。而现在,我们返回的是Result<T>携带了信息T,这使得我们Java知道该将data转换成什么类型。最后,我们为了统一的返回处理,避免赘余的取data数据的逻辑。创建了一个自定义解码器。直接将data中的数据取出来返回。

qq_72952394的博客 1230

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Spring Cloud Alibaba2022版本集成Open Feign

本文介绍了如何集成OpenFeign框架实现微服务通信,主要内容包括: OpenFeign基础概念:声明式HTTP客户端框架,通过接口注解定义请求,支持服务发现、负载均衡等特性。 项目实践步骤: 创建order-service子工程 配置数据库和MyBatisPlus代码生成器 添加OpenFeign和Sentinel依赖 定义Feign客户端接口并实现服务调用 配置熔断降级策略 扩展功能: 集成Sentinel实现熔断保护 配置fallback工厂提供降级服务 演示了服务不可用时的熔断效果。

DayDayUp的博客 293

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

服务远程调用-Open Feign-微服务核心组件

OpenFeign 是个声明式WebService 客户端,使用OpenFeign 让编写Web Service 客户端更简单使用方法: 定义一个服务接口然后在上面添加注解OpenFeign 也支持可拔插式的编码器和解码器。Spring Cloud 对OpenFeign 进行了封装使其支持了Spring MVC 标准注解和HttpMessageConverters【消息转换器】OpenFeign 可以与Eureka 和Ribbon 组合使用以支持负载均衡。

IT_1024的博客 635

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Spring Cloud Open Feign 超时配置及源码分析

在开发 Spring Cloud 微服务项目时候,Feign 调用是非常常见的,Feign 调用的底层还是 HTTP 的远程调用,会有超时问题,如果没有搞清楚超时问题,生产环境的调用肯那个会有种种问题出现,本篇我们来分享一下 Feign 调用的超时配置。

weixin_42118323的博客 4017

Spring Cloud Open Feign系列【2】Feign原生注解

文章目录注解介绍使用案例@RequestLine概述案例@Param概述@Headers概述案例@QueryMap概述案例@HeaderMap概述案例@Body概述案例 注解介绍 之前介绍过,Feign 是通过接口+注解的方式声明一个HTTP 请求。 Feign 注解定义了接口和底层客户端应之间该如何工作的关系。Feign 的默认定义了以下注解: 注解 作用位置 用法 @RequestLine 方法 为请求定义HttpMethod和UriTemplate。 花括号{expression}中的

记录知识、锤炼自我 3752

Open-Feign的使用

目录集成Open-Feign实现远程方法调用加入依赖启动类添加注解远程调用video代码controller代码Open-Feign使用post方法实现远程传输被调用的videoCon调用的Order 集成Open-Feign实现远程方法调用 加入依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spr

Andrew0219的博客 370

feign 和 open feign 区别

feign 和 open feign 区别

大连赵哥的博客 1225

Spring Cloud Open Feign系列【1】Feign的核心概念及入门案例

文章目录1. 什么是Feign2. 常用HTTP客户端HttpURLConnectionHttpClientOkHttpFeign 1. 什么是Feign Feign是—个声明式、模板化的HTTP客户端,GitHub源码地址。 在HTTP协议中,发送请求的一方就是HTTP 客户端,在JAVA 中,有很多HTTP 客户端框架。 2. 常用HTTP客户端 HttpURLConnection HttpURLConnection是在JDK的java.net包中提供的用于HTTP协议访问的基本功能的类,但是由于使用步

记录知识、锤炼自我 1865

Spring Cloud Feign原理详解

目录 1.什么是Feign? 2.Open Feign vs Spring Cloud Feign 2.1.OpenFeign 2.2.Spring Cloud Open Feign 3.Spring Cloud Feign 的使用 4.Spring Cloud Feign 的源码解析 1.什么是Feign? Feign 的初衷是:feign makes writing java...

时光钟摆 1万+
上一篇: 一款开源的通用PDF处理神器,功能强悍!
下一篇: 效率爆表:30款 IDEA 插件,让你的代码飞起来!
公众号-芋道源码
博客等级 码龄10年 1634粉丝 377原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值