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的主要内容,如果未能解决你的问题,请参考以下文章