FeignClient注解及参数

一、FeignClient注解

  FeignClient注解被@Target(ElementType.TYPE)修饰,表示FeignClient注解的作用目标在接口上

1
2
3
4
5
@FeignClient(name =  "github-client" , url =  "https://api.github.com" , configuration = GitHubExampleConfig. class )
public  interface  GitHubClient {
     @RequestMapping(value =  "/search/repositories" , method = RequestMethod.GET)
     String searchRepo(@RequestParam( "q" ) String queryStr);
}

 声明接口之后,在代码中通过@Resource注入之后即可使用。@FeignClient标签的常用属性如下:

  • name:指定FeignClient的名称,如果项目使用了Ribbon,name属性会作为微服务的名称,用于服务发现
  • url: url一般用于调试,可以手动指定@FeignClient调用的地址
  • decode404:当发生http 404错误时,如果该字段位true,会调用decoder进行解码,否则抛出FeignException
  • configuration: Feign配置类,可以自定义Feign的Encoder、Decoder、LogLevel、Contract
  • fallback: 定义容错的处理类,当调用远程接口失败或超时时,会调用对应接口的容错逻辑,fallback指定的类必须实现@FeignClient标记的接口
  • fallbackFactory: 工厂类,用于生成fallback类示例,通过这个属性我们可以实现每个接口通用的容错逻辑,减少重复的代码
  • path: 定义当前FeignClient的统一前缀
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@FeignClient(name =  "github-client" ,
         url =  "https://api.github.com" ,
         configuration = GitHubExampleConfig. class ,
         fallback = GitHubClient.DefaultFallback. class )
public  interface  GitHubClient {
     @RequestMapping(value =  "/search/repositories" , method = RequestMethod.GET)
     String searchRepo(@RequestParam( "q" ) String queryStr);
 
     /**
      * 容错处理类,当调用失败时,简单返回空字符串
      */
     @Component
     public  class  DefaultFallback implements GitHubClient {
         @Override
         public  String searchRepo(@RequestParam( "q" ) String queryStr) {
             return  "" ;
         }
     }
}

 在使用fallback属性时,需要使用@Component注解,保证fallback类被Spring容器扫描到,GitHubExampleConfig内容如下:

1
2
3
4
5
6
7
@Configuration
public  class  GitHubExampleConfig {
     @Bean
     Logger.Level feignLoggerLevel() {
         return  Logger.Level.FULL;
     }
}

  在使用FeignClient时,Spring会按name创建不同的ApplicationContext,通过不同的Context来隔离FeignClient的配置信息,在使用配置类时,不能把配置类放到Spring App Component scan的路径下,否则,配置类会对所有FeignClient生效.

二、Feign Client 和@RequestMapping
当前工程中有和Feign Client中一样的Endpoint时,Feign Client的类上不能用@RequestMapping注解否则,当前工程该endpoint http请求且使用accpet时会报404
Controller:
1
2
3
4
5
6
7
8
9
10
11
12
13
@RestController
@RequestMapping( "/v1/card" )
public  class  IndexApi {
 
     @PostMapping( "balance" )
     @ResponseBody
     public  Info index() {
         Info.Builder builder =  new  Info.Builder();
         builder.withDetail( "x" , 2);
         builder.withDetail( "y" , 2);
         return  builder.build();
     }
}

Feign Client

1
2
3
4
5
6
7
8
9
10
11
12
13
@FeignClient(
         name =  "card" ,
         url =  "http://localhost:7913" ,
         fallback = CardFeignClientFallback. class ,
         configuration = FeignClientConfiguration. class
)
@RequestMapping(value =  "/v1/card" )
public  interface  CardFeignClient {
 
     @RequestMapping(value =  "/balance" , method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
     Info info();
 
}  

if @RequestMapping is used on class, when invoke http /v1/card/balance, like this :

如果 @RequestMapping注解被用在FeignClient类上,当像如下代码请求/v1/card/balance时,注意有Accept header:

1
2
3
4
Content-Type:application/json
Accept:application/json
 
POST http: //localhost:7913/v1/card/balance

那么会返回 404。

如果不包含Accept header时请求,则是OK:

1
2
Content-Type:application/json
POST http: //localhost:7913/v1/card/balance

或者像下面不在Feign Client上使用@RequestMapping注解,请求也是ok,无论是否包含Accept:

1
2
3
4
5
6
7
8
9
10
11
12
13
@FeignClient(
         name =  "card" ,
         url =  "http://localhost:7913" ,
         fallback = CardFeignClientFallback. class ,
         configuration = FeignClientConfiguration. class
)
 
public  interface  CardFeignClient {
 
     @RequestMapping(value =  "/v1/card/balance" , method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
     Info info();
 
}
 
三、Feign请求超时问题
Hystrix默认的超时时间是1秒,如果超过这个时间尚未响应,将会进入fallback代码。而首次请求往往会比较慢(因为Spring的懒加载机制,要实例化一些类),这个响应时间可能就大于1秒了
解决方案有三种,以feign为例。
方法一
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 5000
该配置是让Hystrix的超时时间改为5秒
方法二
hystrix.command.default.execution.timeout.enabled: false
该配置,用于禁用Hystrix的超时时间
方法三
feign.hystrix.enabled: false
该配置,用于索性禁用feign的hystrix。该做法除非一些特殊场景,不推荐使用。

转载于:https://www.cnblogs.com/smiler/p/10689894.html

FeignClient原理及参数配置 公司内部分享的根据网络上的资源整理的FeignClient的原理讲解PPT,包括FeignClient原理、hystrix、ribbon原理及参数配置等。 立即下载

相关推荐

springboot FeignClient注解及参数

主要介绍了springboot FeignClient注解及参数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

@FeignClient使用详解

@FeignClient标签的常用属性如下: name:指定FeignClient的名称,如果项目使用了Ribbon,name属性会作为微服务的名称,用于服务发现 url: url一般用于调试,可以手动指定@FeignClient调用的地址 decode404:当发生http 404错误时,如果该字段位true,会调用decoder进行解码,否则抛出FeignException configuration:Feign配置类,可以自定义Feign的Encoder、Decoder、LogLevel、C.

夜行者的博客 15万+

【低轨】Starlink星链-Ku波段下行信号信号结构解析

Starlink播发位于10.7~12.7GHz之间的下行信号,该信号的设计意图是用于宽带网络通信,但是,文章通过对该信号信号体制的详细分析,以及解调出所调制的完整码序列,为利用Starlink信号进行定位解算提供了必要条件。(注,码序列对应的是卫星版本0.9,1.0和1.5)

iseeinvisible的博客 6293

Spring Boot 中的 @FeignClient 注解是什么,原理,如何使用

FeignClient 注解是 Spring Cloud 中的一个组件,它是基于 Netflix Feign 实现的。@FeignClient 注解可以帮助我们定义和实现服务之间的 RESTful 接口,使得服务之间的调用更加方便和可靠。@FeignClient 注解可以用于客户端的 API 接口定义,它可以将一个 HTTP API 接口转化为一个 Java 接口,从而使得我们可以像调用本地方法一样调用远程服务。

IT徐师兄 2万+

3线SWD接线终极指南:用Jlink调试非3.3V设备的5个关键细节

本文详细解析了使用Jlink调试非3.3V设备时,3线SWD接线的5个关键细节。核心在于正确理解并连接Vref引脚以实现电压适配,避免供电冲突,并掌握精简接线法与固件修复技巧。文章以STM32F205等芯片为例,指导开发者安全、高效地进行混合电压调试。

e4f5g6h7的博客 437

安卓应用锁开发实战:如何通过拦截Activity启动实现密码验证(附完整代码)

本文深入探讨了在安卓系统中开发应用锁功能的两种实战方案:通过修改ActivityStarter源码或实现IActivityController接口来拦截Activity启动流程,从而实现启动前的密码验证。文章详细对比了两种方案的技术选型、实现细节与适用场景,并提供了处理隐式Intent、验证状态管理等核心问题的完整代码,为开发系统级安全功能提供了实用指南。

tcp8optimizer的博客 455

SpringCloud微服务之FeignClient介绍、使用、注解参数解析

FeignClient是Spring Cloud的一个声明式HTTP客户端工具,简化了微服务之间的HTTP调用,通过注解和接口定义能够自动且快速发送HTTP请求。在接触FeignClient之前,对HTTP请求更多的是在前端代码,而FeignClient是后端用来请求HTTP服务(也就是后端某个工程需要请求某个服务),它与前端请求并没有明显的差距,都包括请求url,请求方式,请求参数等,只是书写方式有区别。

weixin_43281875的博客 5631

MIT Bevfusion环境安装 Docker方式,nuscenes数据处理

Bevfusion环境安装,数据生成报错解决module 'numpy' has no attribute 'long';most likely due to a circular import。bevfusion docker环境

Jack_Man_N的博客 1143

请求参数、路径参数、查询参数、Spring MVC/FeignClient请求相关注解梳理

它是指在请求中传递给服务器的数据,可以是URL携带的参数,也可以是请求体,请求数据类型可以是路径参数(rest风格)、查询字符串、JSON数据等,适用于GET/POST/PUT/DELETE方法。在进行HTTP请求时,会看到“请求参数”、“查询参数”、“路径参数”相关字眼,那么它们之间的关系是什么呢?使用FeignClient进行请求或处理http请求时,会使用到许多请求相关注解,现梳理一下以免混乱。: 当没有给定任何注解属性时,会默认将URL请求参数名和响应参数名称进行映射,比如将请求参数。

weixin_43281875的博客 1479

逆向工程师必备:用MDL绕过游戏保护读取内存数据的完整流程(附POC代码)

本文深入探讨了内核级内存访问技术,重点介绍了如何利用MDL(Memory Descriptor List)机制稳定、隐蔽地绕过游戏反作弊系统读取进程内存。通过对比MmCopyVirtualMemory等方法的优劣,提供了完整的MDL映射实战代码与反检测策略,为逆向工程师在内核态进行安全内存操作提供了专业指导。

weixin_29227425的博客 623

ESP32开发板使用Arduino实现变成蓝牙鼠标教程

通过这个教程,你可以轻松将ESP32开发板变成蓝牙鼠标。如果你在使用过程中遇到任何问题,或者库没有正常工作,不妨下载我上传的修复版本,再试试看。希望你们能根据这个基础做出更多有趣的蓝牙控制项目!

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 967

feignclient url_FeignClient注解及参数

一、FeignClient注解FeignClient注解被@Target(ElementType.TYPE)修饰,表示FeignClient注解的作用目标在接口上声明接口之后,在代码中通过@Resource注入之后即可使用。@FeignClient标签的常用属性如下:name:指定FeignClient的名称,如果项目使用了Ribbon,name属性会作为微服务的名称,用于服务发现url: url...

weixin_39719077的博客 1万+

C#利用最小二乘法拟合任意次函数曲线

给出一组离散点,确定一个函数逼近原函数,插值是这样的一种手段。在实际中,数据不可避免的会有误差,插值函数会将这些误差也包括在内。因此,我们需要一种新的逼近原函数的手段: ①不要求过所有的点(可以消除误差影响);②尽可能表现数据的趋势,靠近这些点。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小 [1],其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达,具体可以查阅相关资料。最小二乘法(又称最小平方法)是一种数学技术。

qq_30725967的博客 3755

使用@JsonProperty注解导致FeignClient调用获取不到参数

使用@JsonProperty注解导致FeignClient调用获取不到参数

liouwb的博客 1770

2023华为OD机试真题B卷 Python 实现【最长的元音子串长度】

定义当一个字符串只有元音字母(a,e,i,o,u,A,E,I,O,U)组成,称为元音字符串,现给定一个字符串,请找出其中最长的元音字符串,并返回其长度,如果找不到请返回0, 字符串中任意一个连续字符组成的子序列称为该字符串的子串

MISAYAONE的博客 898

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: 文件贴图
下一篇: Spring Cloud中Feign如何统一设置验证token
dddp75921
博客等级 码龄12年 9粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值