Spring Cloud中关于Feign的常见问题总结
发布时间 - 2026-01-10 23:19:32 点击率:次一、FeignClient接口,不能使用@GettingMapping 之类的组合注解

代码示例:
@FeignClient("microservice-provider-user")
public interface UserFeignClient {
@RequestMapping(value = "/simple/{id}", method = RequestMethod.GET)
public User findById(@PathVariable("id") Long id);
...
}
这边的@RequestMapping(value = "/simple/{id}", method = RequestMethod.GET) 不能写成@GetMapping("/simple/{id}") 。
二、FeignClient接口中,如果使用到@PathVariable ,必须指定其value
代码示例:
@FeignClient("microservice-provider-user")
public interface UserFeignClient {
@RequestMapping(value = "/simple/{id}", method = RequestMethod.GET)
public User findById(@PathVariable("id") Long id);
...
}
这边的@PathVariable("id") 中的”id”,不能省略,必须指定。
三、FeignClient多参数的构造
如果想要请求microservice-provider-user 服务,并且参数有多个例如:http://microservice-provider-user/query-by?id=1&username=张三 要怎么办呢?
直接使用复杂对象:
@FeignClient("microservice-provider-user")
public interface UserFeignClient {
@RequestMapping(value = "/query-by", method = RequestMethod.GET)
public User queryBy(User user);
...
}
该请求不会成功,只要参数是复杂对象,即使指定了是GET方法,feign依然会以POST方法进行发送请求。
正确的写法:
写法1:
@FeignClient("microservice-provider-user")
public interface UserFeignClient {
@RequestMapping(value = "/query-by", method = RequestMethod.GET)
public User queryBy(@RequestParam("id")Long id, @RequestParam("username")String username);
}
写法2:
@FeignClient(name = "microservice-provider-user")
public interface UserFeignClient {
@RequestMapping(value = "/query-by", method = RequestMethod.GET)
public List<User> queryBy(@RequestParam Map<String, Object> param);
}
四、Feign如果想要使用Hystrix Stream,需要做一些额外操作
我们知道Feign本身就是支持Hystrix的,可以直接使用@FeignClient(value = "microservice-provider-user", fallback = XXX.class) 来指定fallback的类,这个fallback类集成@FeignClient所标注的接口即可。
但是假设我们需要使用Hystrix Stream进行监控,默认情况下,访问http://IP:PORT/hystrix.stream 是个404。如何为Feign增加Hystrix Stream支持呢?
需要以下两步:
第一步:添加依赖,示例:
<!-- 整合hystrix,其实feign中自带了hystrix,引入该依赖主要是为了使用其中的hystrix-metrics-event-stream,用于dashboard --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> </dependency>
第二步:在启动类上添加@EnableCircuitBreaker 注解,示例:
@SpringBootApplication
@EnableFeignClients
@EnableDiscoveryClient
@EnableCircuitBreaker
public class MovieFeignHystrixApplication {
public static void main(String[] args) {
SpringApplication.run(MovieFeignHystrixApplication.class, args);
}
}
这样修改以后,访问任意的API后,再访问http://IP:PORT/hystrix.stream,就会展示出一大堆的API监控数据了。
五、如果需要自定义单个Feign配置,Feign的@Configuration 注解的类不能与@ComponentScan 的包重叠
如果包重叠,将会导致所有的Feign Client都会使用该配置。
六、首次请求失败
详见:解决Spring Cloud中Feign/Ribbon第一次请求失败的方法
七、@FeignClient 的属性注意点
(1) serviceId属性已经失效,尽量使用name属性。例如:
@FeignClient(serviceId = "microservice-provider-user")
这么写是不推荐的,应写为:
@FeignClient(name = "microservice-provider-user")
(2) 在使用url属性时,在老版本的Spring Cloud中,不需要提供name属性,但是在新版本(例如Brixton、Camden)@FeignClient必须提供name属性,并且name、url属性支持占位符。例如:
@FeignClient(name = "${feign.name}", url = "${feign.url}")
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
# spring
# cloud
# feign
# 优化
# 详解spring cloud Feign使用中遇到的问题总结
# Spring Cloud-Feign服务调用的问题及处理方法
# Spring Cloud Feign报错问题解决
# springcloud feign docker上无法通讯的问题及解决
# 就会
# 是个
# 首次
# 多个
# 将会
# 不需要
# 可以直接
# 自定义
# 这篇文章
# 带了
# 谢谢大家
# 能与
# 两步
# 会以
# 第二步
# 新版本
# 何为
# 是为了
# 情况下
# 但是在
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制
焦点电影公司作品,电影焦点结局是什么?
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】
Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案
javascript基本数据类型及类型检测常用方法小结
北京网站制作公司哪家好一点,北京租房网站有哪些?
如何快速上传建站程序避免常见错误?
iOS UIView常见属性方法小结
详解MySQL数据库的安装与密码配置
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
如何快速登录WAP自助建站平台?
Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解
如何在腾讯云免费申请建站?
创业网站制作流程,创业网站可靠吗?
Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤
linux写shell需要注意的问题(必看)
Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID
ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集
Laravel如何使用Sanctum进行API认证?(SPA实战)
如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框
如何在云主机快速搭建网站站点?
如何用AWS免费套餐快速搭建高效网站?
利用 Google AI 进行 YouTube 视频 SEO 描述优化
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
linux top下的 minerd 木马清除方法
IOS倒计时设置UIButton标题title的抖动问题
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】
如何用搬瓦工VPS快速搭建个人网站?
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
如何快速生成ASP一键建站模板并优化安全性?
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
JavaScript实现Fly Bird小游戏
在线教育网站制作平台,山西立德教育官网?
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧
北京专业网站制作设计师招聘,北京白云观官方网站?
Laravel如何使用Service Container和依赖注入?(代码示例)
如何用美橙互联一键搭建多站合一网站?
Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】
如何在IIS管理器中快速创建并配置网站?
Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程
Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置
千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】
北京的网站制作公司有哪些,哪个视频网站最好?
PHP正则匹配日期和时间(时间戳转换)的实例代码

