文档章节

Spring Cloud中Feign的常见问题

muzi1994
 muzi1994
发布于 2017/10/19 13:53
字数 681
阅读 1.3K
收藏 2

一、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使用@FeignClient指定fallback无效

我们知道Feign本身就是支持Hystrix的,可以直接使用@FeignClient(value = "microservice-provider-user", fallback = XXX.class) 来指定fallback的类,这个fallback类集成@FeignClient所标注的接口即可。但是在实际项目中发现fallback没有效果。原来是我们需要开启Hystrix:

feign.hystrix.enabled=true

五、Feign如果想要使用Hystrix Stream,需要做一些额外操作

假设我们需要使用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 注解

这样修改以后,访问任意的API后,再访问http://IP:PORT/hystrix.stream,就会展示出一大堆的API监控数据了。

六、如果需要自定义单个Feign配置,Feign的@Configuration 注解的类不能与@ComponentScan 的包重叠

如果包重叠,将会导致所有的Feign Client都会使用该配置。

七、@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/Ribbon第一次请求失败的方法

本文转载自:http://www.itmuch.com/spring-cloud-sum-feign/

muzi1994

muzi1994

粉丝 5
博文 122
码字总数 31876
作品 0
朝阳
私信 提问
加载中

评论(5)

muzi1994
muzi1994 博主

引用来自“NotFound403”的评论

你写的 你自己测试过了吗 不要误导别人

引用来自“muzi1994”的评论

大部分问题遇到过,也测试过。请问以上中的那个描述有问题呢?

引用来自“NotFound403”的评论

@PostMapping @GetMapping
都是可以使用的
是的 这是我写的问题,其实是可以使用@PostMapping @GetMapping注解的,是有参数限制,我之前遇到的问题是Post或者Get请求时,用@PathVariable、@ RequestParam注解接收参数时,参数大于2个以上请求失败。
码农小胖哥
码农小胖哥

引用来自“NotFound403”的评论

你写的 你自己测试过了吗 不要误导别人

引用来自“muzi1994”的评论

大部分问题遇到过,也测试过。请问以上中的那个描述有问题呢?
@PostMapping @GetMapping
都是可以使用的
码农小胖哥
码农小胖哥

引用来自“NotFound403”的评论

你写的 你自己测试过了吗 不要误导别人

引用来自“muzi1994”的评论

大部分问题遇到过,也测试过。请问以上中的那个描述有问题呢?
一、FeignClient接口,不能使用@GettingMapping 之类的组合注解 这个不对吧
muzi1994
muzi1994 博主

引用来自“NotFound403”的评论

你写的 你自己测试过了吗 不要误导别人
大部分问题遇到过,也测试过。请问以上中的那个描述有问题呢?
码农小胖哥
码农小胖哥
你写的 你自己测试过了吗 不要误导别人
微服务开发架构——Spring Cloud常见问题与总结Spring Cloud 各组件配置属性

个人GitHub地址:https://github.com/leebingbin/ 在使用Spring Cloud的过程中,难免会遇到一些问题。所以对Spring Cloud的常用问题做一些总结。 关于“Eureka常见问题”可以参考,我之前的文...

Mr_ET
2017/11/02
178
0
微服务开发架构——Spring Cloud常见问题与总结Turbine 聚合数据不完整

个人GitHub地址:https://github.com/leebingbin/ 在使用Spring Cloud的过程中,难免会遇到一些问题。所以对Spring Cloud的常用问题做一些总结。 三、Turbine 聚合数据不完整 在某些版本的S...

Mr_ET
2017/11/01
169
0
热门技术从零开始学Spring Cloud视频教程发布

使用技术 (1)spring boot,使用版本:1.5.8 (2)spring cloud ,使用版本:Dalston.SR4 (3)Netflix Eureka (4)Netflix Ribbon (5)Feign (6)Netflix Hystrix (7)Spring Clou Con...

小红牛
2018/08/04
0
0
微服务开发架构——Spring Cloud常见问题与总结Hystrix/Feign 整合Hystrix后首次请求失败

个人GitHub地址:https://github.com/leebingbin/ 在使用Spring Cloud的过程中,难免会遇到一些问题。所以对Spring Cloud的常用问题做一些总结。 关于“Eureka常见问题”可以参考,我之前的文...

Mr_ET
2017/10/30
345
0
微服务开发架构——Spring Cloud常见问题与总结Spring Cloud 定位问题思路总结

个人GitHub地址:https://github.com/leebingbin/ 在使用Spring Cloud的过程中,难免会遇到一些问题。所以对Spring Cloud的常用问题做一些总结。 五、Spring Cloud 定位问题思路总结 根据市场...

Mr_ET
2017/11/02
186
0

没有更多内容

加载失败,请刷新页面

加载更多

host machine and virtual machine communication between the three kinds of connection

1.桥接birdge模式 将虚拟机IP与物理机IP设在一个网段上,此时虚拟机相当于一台网络中与本地物理机公用一个HUB的独立设备。网络中其他机器与虚拟机、本地物理机与虚拟机都可以双向通信。虚拟机...

欣欣向荣666
29分钟前
24
0
Centos7安装gitblit

Gitblit介绍 Gitblit是一款开源工具,使用Java编写,用于管理、查看及服务于Git版本库。 Gitblit两种安装包 Gitblit GO:内部集成了Jetty服务器,不需要再集成其他容器,使用简单方便。(本文...

yhb890430
34分钟前
39
0
Ubuntu 安装 Source Code Pro 字体

1、解压字体 $ tar -zxvf source-code-pro-2.030R-ro-1.050R-it.tar.gz 2、解压字体 $ sudo cp -r source-code-pro-2.030R-ro-1.050R-it/TTF/ /usr/share/fonts/truetype/source-code-pro......

张小渔
36分钟前
53
0
mongo Authentication failed记录

虽然用的管理员账号,但是还是出现了以下的错误: 主要看后面的错误信息: { "ok" : 0.0, "errmsg" : "Authentication failed.", "code" : 18, "codeName" : "AuthenticationFailed" } 在想管......

woshixin
48分钟前
70
0
PHP+jPaginate插件制作无刷新分页实例

jPaginate是一款动感滚动分页插件,它的表现形式是像分页的按钮一样,有意思的是这些按钮却可以左右滚动,可以通过单击或鼠标滑向点两侧的小箭头来控制按钮的左右滚动。 读取第一页数据: <d...

ymkjs1990
52分钟前
71
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部