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 {
    ... ...
}
只需要加入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

posted @ 2020-09-27 10:10  bookc  阅读(2375)  评论(0编辑  收藏  举报