Feign+Hystrix远程调用服务降级
hystrix介绍
在分布式环境中,许多服务依赖项中的一些必然会失败。Hystrix是一个库,通过添加延迟容忍和容错逻辑,帮助你控制这些分布式服务之间的交互。Hystrix通过隔离服务之间的访问点、停止级联失败和提供回退选项来实现这一点,所有这些都可以提高系统的整体弹性。
Hystrix被设计的目标是:
- 对通过第三方客户端库访问的依赖项(通常是通过网络)的延迟和故障进行保护和控制。
- 在复杂的分布式系统中阻止级联故障。
- 快速失败,快速恢复。
- 回退,尽可能优雅地降级。
- 启用近实时监控、警报和操作控制。
hystrix在微服务架构中一般作为熔断器使用,为防止服务的雪崩 通过配置熔断器,让系统在特殊情况下舍弃掉一些服务,以保证整个系统的稳定性。hystrix单独可以对单个服务进行配置,如果服务停止,可以返回一些友好信息。
本次配置的是通过Feign远程调用,搭配Hystrix实现远程调用服务的降级,目的是为了防止某些服务的崩溃不引起整体系统的崩溃。
<!--服务调用-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
添加服务调用的依赖
在需要远程调用的服务启动类上添加注解
@EnableFeignClients(basePackages = "com.xxx.api")
Clien客户端
对Feign中指定回滚的工厂类,如果服务不存在 则会调用xxxClientImpl类,进行服务的降级
@FeignClient(value = "服务名",fallbackFactory = xxxClientImpl.class)
public interface xxxClient {
/**
* 删除多个文件
* @param keys 多个文件完整名称集合
* @return 返回多个删除的文件名
*/
@DeleteMapping("/nakadai/oss/fileDeletion")
R fileDeletion(@RequestParam("keys") List<String> keys);
/**
* 上传文件
* @param file 文件
* @return 文件路径及相关信息
*/
@PostMapping("/nakadai/oss/fileUpload")
R fileUpload(@RequestParam("file") MultipartFile file);
}
实现类
@Component
public class xxxClientImpl implements FallbackFactory<xxxClient> {
@Override
public xxxClient create(Throwable throwable) {
return new xxxClient() {
@Override
public R fileDeletion(List<String> keys) {
return R.error("调用服务失败:" + throwable.getMessage());
}
@Override
public R fileUpload(MultipartFile file) {
return R.error("调用服务失败:" + throwable.getMessage());
}
};
}
}
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!