Feign+Hystrix远程调用服务降级

hystrix介绍

在分布式环境中,许多服务依赖项中的一些必然会失败。Hystrix是一个库,通过添加延迟容忍和容错逻辑,帮助你控制这些分布式服务之间的交互。Hystrix通过隔离服务之间的访问点、停止级联失败和提供回退选项来实现这一点,所有这些都可以提高系统的整体弹性。

Hystrix被设计的目标是:

  1. 对通过第三方客户端库访问的依赖项(通常是通过网络)的延迟和故障进行保护和控制。
  2. 在复杂的分布式系统中阻止级联故障。
  3. 快速失败,快速恢复。
  4. 回退,尽可能优雅地降级。
  5. 启用近实时监控、警报和操作控制。

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 协议 ,转载请注明出处!

算法总结 Previous
SpringMVC笔记 Next