Feign Fallback FallbackFactory 笔记
关于使用请查看 :https://blog.csdn.net/sun_shaoping/article/details/82079287
1.@SpringCloudApplication
该包包含三个注解
@SpringBootApplication
@EnableDiscoveryClient
@EnableCircuitBreaker
2.安装 maven 包
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency>
3.新增开关
feign.hystrix.enabled=true
什么时候应该Fallback
2XX,成功,这个不用再讨论。
5XX,也相当明确,直接Fallback,这个也不用讨论。
4XX,可以一律认为是业务逻辑异常(或者更精确的说,可以认为4XX中的某几个是业务异常)。这时候,应该是用if/else来处理这个异常,而不应该动用Hystrix来Fallback。
Feign在默认情况下,对于非2XX,都认为是异常。这个地方是有问题的。特别是对于404这种非常容易抛出的业务异常来说,没两下就circuit break了。
@FeignClient(name = "marathon-lb", fallback = FooBarClientFallback.class, decode404 = true) @RequestMapping(value = "/foo/bar") public interface FooBarClient { ... ... }
只需要加入
排除404,已经基本上够用了,如果想把409、400等status也加到例外中,可以重写一下Feign的errorDecoder。
decode404 = true
这一个参数,Feign对于2XX和404 ,都不会走Fallback了。排除404,已经基本上够用了,如果想把409、400等status也加到例外中,可以重写一下Feign的errorDecoder。
REST返回码的选择
下面详细讲一下HTTP STATUS的选择问题。
关于HTTP返回码,看了很多参考(论战),"大概"可以这样选择:
成功: 2XX系列
- 200 OK // 查询、删除成功用这个
- 201 CREATED // 新增、修改时用这个。且返回BODY中无任何信息。
业务异常: 4XX系列
- 400 BAD_REQUEST // 现在有很多人在业务异常时抛这个错。但400要慎重使用。稍后解释。
- 404 NOT_FOUND // 查询不到结果时用这个
- 403 FORBIDDEN // 这个也慎重使用。
- 409 CONFLICT // 业务异常时,可以用这个。
主机异常:5XX系列
- 500 INTERNAL_SERVER_ERROR // 对于未知异常,统一用这个了
- 503 SERVICE_UNAVAILABLE // Hystrix异常用这个
参考:https://www.jianshu.com/p/8d47a4fc4e82