Feign真正正确的使用方法--供老项目调用

SpringCloud--组件超时配置 最近在使用spring cloud 搭建一个微服务项目,因为需要调用第三方接口,且延迟可能较高, 特意写了个测试接口测试30秒左右延迟能否正常处理,请求中途会在zuul的gate-service中断于15秒左右, 并抛出如下异常 com.netflix.zuul.exception.ZuulException: Forwarding error ... ... .... 阅读详情
 

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
來源:简书

SpringCloud构建后端的common项目&使用Feign实现服务间调用 SpringCloud下搭建公共common项目,以及使用Feign实现服务间调用 阅读详情

相关推荐

使用feign远程调用接口

项目中开发中,经常会用到调用其他项目的接口 或者第三方接口的情况,以前经常使用的是spring 的restTemplate 或者httpClient,但是使用每次都需要写一些公共的调用代码,比较麻烦。 feign 则能够比较好的解决了这个问题,不是spring cloud 项目也可以使用。 一,是什么 feign 是Netflix 开发的声明式的http客户端,可以帮我们更加方便的调用http接口。在使用时候,就像调用本地方法一样,创建一个接口,然后在接口上添加一些注解,代码就可以完成了。spring

遇见未知的自己 3622

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

u010928061的博客 2624

如何使用Feign优雅的调用远程服务

1.Feign是什么? 官网地址:https://cloud.spring.io/spring-cloud-openfeign/single/spring-cloud-openfeign.html#spring-cloud-feign 官网的解释是: Feign是一个声明性的Web服务客户端。它使编写Web服务客户端变得更容易。要使用Feign,请创建一个界面并对其进行...

Tyler.shi的博客 2890

七:微服务调用组件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..

Xx__WangQi的博客 2077

[享学Feign] 二、原生Feign的注解介绍及使用示例

通过第一篇文章了解了Feign的最基础知识,作为一个有态度的程序员,我们势必要搞清楚它整个执行的脉络,了解它的执行过程和原理才算结束,这是最后最后最后进行个性化定制的基础,一切都为了“玩”嘛。 本文将讲解它原生支持的注解,毕竟Feign并不强依赖于Spring MVC,在Java环境也是可以作为HC来使用的,了解起来不难,建议你掌握。

架构师:通透,才能写出好代码! 4289

springcloud应用之feign

springcloud应用之feign

Feign真正正确的使用方法

Feign是spring cloud中服务消费端的调用框架,通常与ribbon,hystrix等组合使用。 但是在某些项目中,由于遗留原因,整个系统并不是spring cloud项目,甚至不是spring项目,而使用者关注的重点仅仅是简化http调用代码的编写。 如果采用httpclient或者okhttp这样相对较重的框架,对初学者来说编码量与学习曲线都会是一个挑战,而使用spring中Re...

穷水叮咚的博客 6471

SAP-ABAP:SAP中如何查看系统表之间的关联关系?

在业务逻辑开发或者ALV开发过程中,我们通常要从系统中找出几个标准表之间的关联关系,有的是head与item,通过外键进行关联的关系。那么怎么去找到呢?以上就是具体如何产看系统表之间的关联关系的步骤,对于不同代码的业务顾问,也是必须要掌握的。

LinkStar的博客 2430

使用Feign调用服务接口

一看就会的使用Feign调用服务接口,使微服务的各个模块相互之间可以进行数据访问。赶快动动小手练练吧。

一枚小爪哇(Java)的博客 1万+

Latex小白也能搞定!5分钟教你用Overleaf打造个性化简历(附免费模板)

本文为LaTeX新手提供了一份快速上手指南,教你如何在5分钟内使用Overleaf在线平台和现成模板,轻松打造专业且个性化的简历。文章详细介绍了从选择模板、替换个人信息到进行颜色、图标等个性化调整的完整流程,让你无需深入学习LaTeX语法,即可高效制作出排版精美、脱颖而出的求职简历。

2a4s6d8f0g的博客 684

Deepseek接入QQ机器人:实现拟人化概率回复的完整指南

大语言模型API正在快速改变即时通讯工具的交互方式。通过标准化的OpenAI兼容接口,开发者可以将Deepseek等AI服务嵌入到QQ机器人等IM场景中,实现自然语言对话能力。其核心原理在于事件驱动架构:消息接收层通过OneBot协议获取群聊内容,业务层利用概率过滤与冷却机制控制回复节奏,再由大模型生成拟人化文本。这种设计不仅避免了机器人刷屏,还能通过系统提示词塑造性格,营造真实的社群陪伴体验。适用于粉丝群互动、内容订阅、小规模客服等场景,同时支持多群独立配置、关键词加权回复及上下文记忆扩展。在实际工程中,

weixin_29051245的博客 462

在springboot单体项目上使用feign远程调用接口

之前使用feign是在分布式项目上,从来没有在纯springboot项目上单独用过。这次有需求要用突然间还挺蒙的,百度了一圈终于会了。 在Java中远程调用接口,可以使用HttpClient也可以使用feign,我这里就说feign的使用。 先导入feign依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring

快敲代码去 4743

深入分析大众点评 Ajax 接口:直接请求 JSON 数据高效获取评论

大众点评网站采用前后端分离架构,通过Ajax接口动态加载数据。按F12打开开发者工具,切换到Network(网络)面板。实际环境中,我们需要使用Python重现这一加密逻辑。查看请求响应,寻找包含评论数据的JSON接口。参数是大众点评的反爬机制核心,需要特别处理。:尊重网站的robots.txt文件规定。:仅将数据用于合法合规的研究和分析目的。:不侵犯大众点评的商业秘密和知识产权。打开大众点评网站,进入任意商户页面。:对采集到的用户信息进行脱敏处理。:避免对目标网站造成过大负担。

Z_suger7的博客 1585

SpringBoot项目中使用feign调用远程http接口(超详细文档)

参考文档: Feign远程调用原理 在实际生产需要中,经常会遇到调用远程http接口的场景. 举例: 比如我的Springboot项目会调用另一个Springboot项目的接口, 或者调用一些第三方服务的Restful api. 采用常规的方案,需要配置请求head、body,然后才能发起请求。获得响应体后,还需解析等操作,十分繁琐。 Feign是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求。 Feign通过处理注解,将请求模板化,当实际调用的时候,传入参数,根据参数再应用

.... 2万+

基于高光谱的物质反演与分类 — 技术文章(原理详解 + 深度代码实现)

高光谱遥感 / 近场光谱采集产生逐像素上百波段的光谱曲线,是物质识别与定量反演(abundance / composition estimation)和语义分类(landcover / material class)的一把利器。本文第一部分对常用模型(线性混合模型、非线性辐射传输、稀疏反演、降维与特征选择、分类器/神经网络)进行数学推导与理论分析;第二部分给出两套完整实现:A. 基于 LMM 的约束最小二乘 / 稀疏反演流水线(含端到端评估);

VectorShift的博客 221

经典的YOLOv3和YOLOV5算法详解及代码复现

yolov3和yolov5算法详解及代码复现

hasakie的博客 771

Feign 中使用 @RequestParam、@RequestBody 的正确姿势

背景 最近在使用 @RequestParam、@RequestBody 注解定义 feign 接口的时候出现一些使用上的问题,造成调用方启动的时候会报错。 详细情况 第一种情况,如下: @PostMapping(value = "/hello2") BetaDto hello2(String name1); 接口有且只有一个 key/value 参数,此时可以不必在 name1 参数上使用 ...

cab5的博客 2万+

AI快速变现之路,AI视频创作

初期投入$3000(工具订阅+样片制作),重点攻克跨境电商和本地生活服务市场。关注2025年AIGC视频工具的API降价趋势(如Pika企业版折扣可达50%),建议与云服务商签订长期合作协议。

qq_29896351的博客 1982

OpenFeign-远程调用((Feign的使用方法))

将Feign的Client抽取为⼀个独⽴的模块, 并把涉及到的实体类等都放在这个模块中, 打成⼀个Jar. 服务。将Feign的Client抽取为⼀个独⽴的模块, 并把涉及到的实体类等都放在这个模块中, 打成⼀个Jar. 服务。官⽅推荐Feign的使⽤⽅式为继承的⽅式, 但是企业开发中, 更多是把Feign接⼝抽取为⼀个独⽴的模块。官⽅推荐Feign的使⽤⽅式为继承的⽅式, 但是企业开发中, 更多是把Feign接⼝抽取为⼀个独⽴的模块。或者也可以指定需要加载的Feign客⼾端(通过。

Reggie_L的博客 1287

如何配置SSC CANopen的excel文件

如何配置 CANOpen 的 EXCEL 文件

PI_sunyang的博客 3701

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

SpringCloud-基于Feign远程调用

本文将介绍如何在Spring Cloud中使用Feign进行远程调用。Spring Cloud是一个用于构建分布式系统的开发工具包,它提供了一系列的微服务组件,其中之一就是Feign。Feign是一种声明式的Web服务客户端,它简化了在Spring Cloud中进行远程调用的过程。

踏雨歌青春,诗酒趁年华 2687

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【微服务】Feign远程调用和异步调用请求头丢失问题

最近在梳理以前做过的项目:遇到了俩问题,第一个问题是,在微服务项目中,我们做了单点登录,在项目使用feign远程调用另一个模块的远程服务时,发现提示无权限调用。第二个问题是异步调用时,老请求线程不共享问题,导致业务获取不到老请求报空指针异常。

文艺倾年的博客 4320

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...

weixin_40170892的博客 1万+

独立使用Feign进行远程调用

独立使用Feign进行远程调用 一. 直接操作,以后细讲 1.1 引入相关依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId&g...

暗余的博客 2292
上一篇: freemarker常见语法大全
下一篇: hibernate两表关联分页查询
琅琊山二当家
博客等级 码龄18年 447粉丝 322原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值