SpringCloud-Hystrix-如何使用Fallback

Posted accessking

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloud-Hystrix-如何使用Fallback相关的知识,希望对你有一定的参考价值。

先介绍一下我所在的团队使用Fallback的使用方式
  • FallBack的返回内容是null或者一个空集合,如下代码所示
public class ProductClientFallBack implements SdbProductClient 

    @Override
    public List<ProductVO> queryAllProducts() 
        return Lists.newArrayList();
    

    @Override
    public ProductVO getProductById(int productId) 
        return null;
    
  • Fallback文件由服务方提供
  • 针对现行的使用方式我产生了两个疑问/问题

    FallBack方法中直接返回null或者空集合这样真的好吗?
  • 直接返回null或者空集合会导致调用方无法区分null和空集合是来源于正常的业务逻辑还是发生了降级,这样使用很容易造成问题的难以追踪
  • 那么如何解决这个问题呢,可以参考以下代码,方法返回一个包装的Response或者特殊的Exception
    @Override
    public Response<Integer> uploadProductJob(List<ProductJob> productJobList) 
        return ResponseUtil.makeError(ErrorCode.CLIENT_SERVER_ERROR);
    
FallBack 应该由服务方提供,还是在调用方来提供
  • 答案并不固定,分以下场景

    第一种情况,大部分接口都有降级逻辑,并且多个调用方使用同一套降级逻辑;这种情况下FallBack由服务方提供,这样可以省去调用方之间出现复制代码的情况,但是这样存在一个很严重的问题,就是复杂的降级逻辑会引用到其他包,可能会引发相互依赖的问题,所以这种情况下是放在服务方还是调用方还需要灵活的做一下决策
    第二种情况,大部分接口都有降级逻辑,并且多个调用方使用不同的降级逻辑;这种情况下FallBack文件放在调用方,由于调用方使用的是不同的降级逻辑,那么服务方就无法提供个性化的降级方案了
    第三种情况,大部分接口都没有降级逻辑;这种情况下FallBack文件由服务方提供即可,如个别接口需要有降级逻辑,在调用方实现降级逻辑即可;其中FallBack方法的返回内容,直接返回一个特殊的Exception或者特殊的Response;据我了解大部分技术团队都是这样用的,这样用起来简单、方便、直接一些

以上是关于SpringCloud-Hystrix-如何使用Fallback的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloud-Hystrix-服务熔断

SpringCloud-Hystrix-服务熔断

SpringCloud-Hystrix-服务熔断

springcloud-Hystrix

springcloud-hystrix断路器对微服务的容错处理

SpringCloud-Hystrix总结