目录
简述
在Spring Cloud中,当使用Feign或Hystrix等工具进行微服务调用时,可以处理远程服务调用失败或抛出异常的情况。为了处理这些故障情况,通常使用
fallback
和fallbackFactory
来提供降级处理逻辑。
fallback
(降级处理类):
fallback
是在Feign客户端接口上通过@FeignClient
注解的fallback
属性指定的一个类。- 这个类通常实现了远程服务接口,它的方法是对远程服务调用失败或异常情况的降级处理逻辑。
- 当远程服务调用失败或抛出异常时,Feign会使用
fallback
中对应的方法来执行降级逻辑。fallback
适用于对所有远程服务接口通用的降级逻辑,适用范围相对较广。
fallbackFactory
(降级处理工厂类):
fallbackFactory
是在Feign客户端接口上通过@FeignClient
注解的fallbackFactory
属性指定的一个类,它实现了FallbackFactory
接口。FallbackFactory
接口有一个方法create
,该方法返回一个实现了远程服务接口的降级处理类。- 当远程服务调用失败或抛出异常时,Feign会使用
fallbackFactory
中的create
方法来创建降级处理类的实例,并执行降级逻辑。fallbackFactory
可以根据需要为不同的远程服务接口提供不同的降级处理逻辑,更加灵活。
示例
feign接口
fallback降级处理类
使用 fallbackFactory降级
对比
特性 | fallback | fallbackFactory |
---|---|---|
适用场景 | 通用的降级逻辑,所有方法共享相同的降级处理 | 针对不同方法需要不同降级逻辑的情况 |
声明方式 | 通过@FeignClient 的fallback 属性指定 | 通过@FeignClient 的fallbackFactory 属性指定 |
类型 | 一个降级处理类,实现远程服务接口 | 一个降级处理工厂类,实现FallbackFactory 接口 |
方法创建时机 | 初始化时创建 | 每次远程服务调用失败时动态创建 |
异常信息捕获 | 不可以捕获到熔断的异常信息 | 可以捕获到熔断的异常信息 |
灵活性 | 较低,所有方法共享相同的降级逻辑 | 较高,不同方法可以有不同的降级逻辑 |
参数传递 | 不能传递Throwable 对象 | 可以传递Throwable 对象 |