zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    简述-计算机语言的前世今生
    记一次由于引用第三方服务导致的GC overhead limit exceeded异常
    JAVA初始化及类的加载
    springboot容器启动顺序之@Configuration ContextRefreshedEvent事件初始化 ApplicationRunner
    高并发编程之发布与溢出
    编写高质量JAVA代码之让接口的职责保持单一
    Spring Boot中初始化资源的几种方式
    Thread.yeild方法详解
    JAVA基础之this关键之理解
    Django 1.10 中文文档------3.3.8 会话sessions
  • 原文地址:https://www.cnblogs.com/fqybzhangji/p/13737935.html
Copyright © 2011-2022 走看看