Feign是spring cloud中服务消费端的调用框架,通常与ribbon,hystrix等组合使用。
但是在某些项目中,由于遗留原因,整个系统并不是spring cloud项目,甚至不是spring项目,而使用者关注的重点仅仅是简化http调用代码的编写。
如果采用httpclient或者okhttp这样相对较重的框架,对初学者来说编码量与学习曲线都会是一个挑战,而使用spring中RestTemplate,又没有配置化的解决方案,由此想到是否可以脱离spring cloud,独立使用Feign。
maven依赖
<dependency>
<groupId>com.netflix.feign</groupId>
<artifactId>feign-core</artifactId>
<version>8.18.0</version>
</dependency>
自定义接口
import feign.Param;
import feign.RequestLine;
public interface RemoteService {
@RequestLine("GET /users/list?name={name}")
String getOwner(@Param(value = "name") String name);
}
通过@RequestLine指定HTTP协议及URL地址
配置类
RemoteService service = Feign.builder()
.options(new Options(1000, 3500))
.retryer(new Retryer.Default(5000, 5000, 3))
.target(RemoteService.class, "http://127.0.0.1:8085");
options方法指定连接超时时长及响应超时时长,retryer方法指定重试策略,target方法绑定接口与服务端地址。返回类型为绑定的接口类型。
调用
String result = service.getOwner("scott");
与调用本地方法相同的方式调用feign包装的接口,直接获取远程服务提供的返回值。
附:服务生产者
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping(value="users")
public class UserController {
@RequestMapping(value="/list",method={RequestMethod.GET,RequestMethod.POST,RequestMethod.PUT})
@ResponseBody
public String list(@RequestParam String name) throws InterruptedException{
return name.toUpperCase();
}
}
更进一步(前面内容可以忽略 只看这里往下的)
在项目中,服务消费端与生产端之间交换的数据往往是一或多个对象,feign同样提供基于json的对象转换工具,方便我们直接以对象形式交互。
业务接口
public interface RemoteService {
@Headers({"Content-Type: application/json","Accept: application/json"})
@RequestLine("POST /users/list")
User getOwner(User user);
}
加入@Headers注解,指定Content-Type为json
配置
RemoteService service = Feign.builder()
.encoder(new JacksonEncoder())
.decoder(new JacksonDecoder())
.options(new Options(1000, 3500))
.retryer(new Retryer.Default(5000, 5000, 3))
.target(RemoteService.class, "http://127.0.0.1:8085");
encoder指定对象编码方式,decoder指定对象解码方式。这里用的是基于Jackson的编、解码方式,需要在pom.xml中添加Jackson的依赖
<dependency>
<groupId>com.netflix.feign</groupId>
<artifactId>feign-jackson</artifactId>
<version>8.18.0</version>
</dependency>
调用
User result = service.getOwner(u);
附:服务生产者
@Controller
@RequestMapping(value="users")
public class UserController {
@RequestMapping(value="/list",method={RequestMethod.GET,RequestMethod.POST,RequestMethod.PUT})
@ResponseBody
public User list(@RequestBody User user) throws InterruptedException{
System.out.println(user.getUsername());
user.setId(100L);
user.setUsername(user.getUsername().toUpperCase());
return user;
}
}
唯一的变化就是使用了@RequestBody来接收json格式的数据。
相关文档
作者:SamHxm
链接:https://www.jianshu.com/p/3d597e9d2d67
來源:简书
相关推荐
使用feign远程调用接口
项目中开发中,经常会用到调用其他项目的接口 或者第三方接口的情况,以前经常使用的是spring 的restTemplate 或者httpClient,但是使用每次都需要写一些公共的调用代码,比较麻烦。 feign 则能够比较好的解决了这个问题,不是spring cloud 项目也可以使用。 一,是什么 feign 是Netflix 开发的声明式的http客户端,可以帮我们更加方便的调用http接口。在使用时候,就像调用本地方法一样,创建一个接口,然后在接口上添加一些注解,代码就可以完成了。spring
Feign超时时间配置
1、基于配置类的全局配置 使用Request.Options配置超时时间 创建配置类ConfigFeign,声明Request.Options @Bean public Request.Options options() { return new Request.Options(2L, TimeUnit.SECONDS, 5L, TimeUnit.SECONDS, true); } 2、在配置文件中实现局部配置 feign.client.config.provider.connectT
如何使用Feign优雅的调用远程服务
1.Feign是什么? 官网地址:https://cloud.spring.io/spring-cloud-openfeign/single/spring-cloud-openfeign.html#spring-cloud-feign 官网的解释是: Feign是一个声明性的Web服务客户端。它使编写Web服务客户端变得更容易。要使用Feign,请创建一个界面并对其进行...
七:微服务调用组件Feign
目录 JAVA 项目中如何实现接口调用? 1. 什么是Feign 1.1 优势 1.2 Feign的设计架构 1.3 Ribbon&Feign对比 1.4Feign单独使用 2. Spring Cloud Alibaba快速整合Feign 3. Spring Cloud Feign的自定义配置及使用 3.1 日志配置 3.2 契约配置 3.3 通过拦截器实现认证 3.4 超时时间配置 3.5 客户端组件配置 3.5.1 配置Apache HttpClient 3..
[享学Feign] 二、原生Feign的注解介绍及使用示例
通过第一篇文章了解了Feign的最基础知识,作为一个有态度的程序员,我们势必要搞清楚它整个执行的脉络,了解它的执行过程和原理才算结束,这是最后最后最后进行个性化定制的基础,一切都为了“玩”嘛。 本文将讲解它原生支持的注解,毕竟Feign并不强依赖于Spring MVC,在Java环境也是可以作为HC来使用的,了解起来不难,建议你掌握。
springcloud应用之feign
springcloud应用之feign
Feign真正正确的使用方法
Feign是spring cloud中服务消费端的调用框架,通常与ribbon,hystrix等组合使用。 但是在某些项目中,由于遗留原因,整个系统并不是spring cloud项目,甚至不是spring项目,而使用者关注的重点仅仅是简化http调用代码的编写。 如果采用httpclient或者okhttp这样相对较重的框架,对初学者来说编码量与学习曲线都会是一个挑战,而使用spring中Re...
SAP-ABAP:SAP中如何查看系统表之间的关联关系?
在业务逻辑开发或者ALV开发过程中,我们通常要从系统中找出几个标准表之间的关联关系,有的是head与item,通过外键进行关联的关系。那么怎么去找到呢?以上就是具体如何产看系统表之间的关联关系的步骤,对于不同代码的业务顾问,也是必须要掌握的。
使用Feign调用服务接口
一看就会的使用Feign调用服务接口,使微服务的各个模块相互之间可以进行数据访问。赶快动动小手练练吧。
Latex小白也能搞定!5分钟教你用Overleaf打造个性化简历(附免费模板)
本文为LaTeX新手提供了一份快速上手指南,教你如何在5分钟内使用Overleaf在线平台和现成模板,轻松打造专业且个性化的简历。文章详细介绍了从选择模板、替换个人信息到进行颜色、图标等个性化调整的完整流程,让你无需深入学习LaTeX语法,即可高效制作出排版精美、脱颖而出的求职简历。
Deepseek接入QQ机器人:实现拟人化概率回复的完整指南
大语言模型API正在快速改变即时通讯工具的交互方式。通过标准化的OpenAI兼容接口,开发者可以将Deepseek等AI服务嵌入到QQ机器人等IM场景中,实现自然语言对话能力。其核心原理在于事件驱动架构:消息接收层通过OneBot协议获取群聊内容,业务层利用概率过滤与冷却机制控制回复节奏,再由大模型生成拟人化文本。这种设计不仅避免了机器人刷屏,还能通过系统提示词塑造性格,营造真实的社群陪伴体验。适用于粉丝群互动、内容订阅、小规模客服等场景,同时支持多群独立配置、关键词加权回复及上下文记忆扩展。在实际工程中,
在springboot单体项目上使用feign远程调用接口
之前使用feign是在分布式项目上,从来没有在纯springboot项目上单独用过。这次有需求要用突然间还挺蒙的,百度了一圈终于会了。 在Java中远程调用接口,可以使用HttpClient也可以使用feign,我这里就说feign的使用。 先导入feign依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring
深入分析大众点评 Ajax 接口:直接请求 JSON 数据高效获取评论
大众点评网站采用前后端分离架构,通过Ajax接口动态加载数据。按F12打开开发者工具,切换到Network(网络)面板。实际环境中,我们需要使用Python重现这一加密逻辑。查看请求响应,寻找包含评论数据的JSON接口。参数是大众点评的反爬机制核心,需要特别处理。:尊重网站的robots.txt文件规定。:仅将数据用于合法合规的研究和分析目的。:不侵犯大众点评的商业秘密和知识产权。打开大众点评网站,进入任意商户页面。:对采集到的用户信息进行脱敏处理。:避免对目标网站造成过大负担。
SpringBoot项目中使用feign调用远程http接口(超详细文档)
参考文档: Feign远程调用原理 在实际生产需要中,经常会遇到调用远程http接口的场景. 举例: 比如我的Springboot项目会调用另一个Springboot项目的接口, 或者调用一些第三方服务的Restful api. 采用常规的方案,需要配置请求head、body,然后才能发起请求。获得响应体后,还需解析等操作,十分繁琐。 Feign是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求。 Feign通过处理注解,将请求模板化,当实际调用的时候,传入参数,根据参数再应用
基于高光谱的物质反演与分类 — 技术文章(原理详解 + 深度代码实现)
高光谱遥感 / 近场光谱采集产生逐像素上百波段的光谱曲线,是物质识别与定量反演(abundance / composition estimation)和语义分类(landcover / material class)的一把利器。本文第一部分对常用模型(线性混合模型、非线性辐射传输、稀疏反演、降维与特征选择、分类器/神经网络)进行数学推导与理论分析;第二部分给出两套完整实现:A. 基于 LMM 的约束最小二乘 / 稀疏反演流水线(含端到端评估);
经典的YOLOv3和YOLOV5算法详解及代码复现
yolov3和yolov5算法详解及代码复现
Feign 中使用 @RequestParam、@RequestBody 的正确姿势
背景 最近在使用 @RequestParam、@RequestBody 注解定义 feign 接口的时候出现一些使用上的问题,造成调用方启动的时候会报错。 详细情况 第一种情况,如下: @PostMapping(value = "/hello2") BetaDto hello2(String name1); 接口有且只有一个 key/value 参数,此时可以不必在 name1 参数上使用 ...
AI快速变现之路,AI视频创作
初期投入$3000(工具订阅+样片制作),重点攻克跨境电商和本地生活服务市场。关注2025年AIGC视频工具的API降价趋势(如Pika企业版折扣可达50%),建议与云服务商签订长期合作协议。
OpenFeign-远程调用((Feign的使用方法))
将Feign的Client抽取为⼀个独⽴的模块, 并把涉及到的实体类等都放在这个模块中, 打成⼀个Jar. 服务。将Feign的Client抽取为⼀个独⽴的模块, 并把涉及到的实体类等都放在这个模块中, 打成⼀个Jar. 服务。官⽅推荐Feign的使⽤⽅式为继承的⽅式, 但是企业开发中, 更多是把Feign接⼝抽取为⼀个独⽴的模块。官⽅推荐Feign的使⽤⽅式为继承的⽅式, 但是企业开发中, 更多是把Feign接⼝抽取为⼀个独⽴的模块。或者也可以指定需要加载的Feign客⼾端(通过。
如何配置SSC CANopen的excel文件
如何配置 CANOpen 的 EXCEL 文件
廖雪峰Python教程[完整版]
廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白
SpringCloud-基于Feign远程调用
本文将介绍如何在Spring Cloud中使用Feign进行远程调用。Spring Cloud是一个用于构建分布式系统的开发工具包,它提供了一系列的微服务组件,其中之一就是Feign。Feign是一种声明式的Web服务客户端,它简化了在Spring Cloud中进行远程调用的过程。
Camera2Demo
在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作
【微服务】Feign远程调用和异步调用请求头丢失问题
最近在梳理以前做过的项目:遇到了俩问题,第一个问题是,在微服务项目中,我们做了单点登录,在项目使用feign远程调用另一个模块的远程服务时,发现提示无权限调用。第二个问题是异步调用时,老请求线程不共享问题,导致业务获取不到老请求报空指针异常。
ET2012新版免狗免安装绿色软件
ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,
迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)
迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)
使用feign实现微服务之间的调用
在实现这个功能之前确保服务中必须已经配置好了Eureka,这个是使用Feign的前提条件 1.在调用方的POM文件中添加依赖: <!-- feign微服务调用 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-c...
独立使用Feign进行远程调用
独立使用Feign进行远程调用 一. 直接操作,以后细讲 1.1 引入相关依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId&g...
3622



被折叠的 条评论
为什么被折叠?



