电脑基础 · 2023年3月15日

5-2 SpringCloud快速开发入门:Hystrix 的服务降级与异常处理

接上一章节Hystrix快速入门,这里讲讲Hystrix 的服务降级与异常处理

Hystrix 的服务降级

有了服务的熔断,随之就会有服务的降级,所谓服务降级,就是当某个服务熔断之后,服务端提供的服务将不再被调用,此时由客户端自己准备一个本地的fallback 回调,返回一个默认值来代表服务端的返回;这种做法,虽然不能得到正确的返回结果,但至少保证了服务的可用,比直接抛出错误或服务不可用要好很多,当然这需要根据具体的业务场景来选择;

5-2 SpringCloud快速开发入门:Hystrix 的服务降级与异常处理

Hystrix 的异常处理

我们在调用服务提供者时,我们自己也有可能会抛异常,默认情况下方法抛了异常会自动进行服务降级,交给服务降级中的方法去处理; 当我们自己发生异常后,只需要在服务降级方法中添加一个 Throwable 类型的参数就能够获取到抛出的异常的类型及信息,如下:

/**
     * 熔断的回调方法,也就是降级方法
     * @return
     */
    public String error(Throwable throwable) {
        System.out.println("异常 : " + throwable.getMessage());
        return "error";
    }
  • 在服务消费者调用方法里加入异常代码,请求服务提供者后可以看到获取的异常信息,服务提供者发生异常同理,唯一不同的是服务提供者是http请求,返回的异常就是接口异常了
    5-2 SpringCloud快速开发入门:Hystrix 的服务降级与异常处理

Hystrix 的异常处理取消

如果远程服务有一个异常抛出后我们不希望进入到服务降级方法中去处理,而是直接将异常抛给用户,那么我们可以在@HystrixCommand 注解中添加忽略异常,如下:

  • 注:服务超时还是会进入熔断降级方法中处理

  • 添加忽略异常注解,将异常抛给用户

@HystrixCommand(fallbackMethod = "error", ignoreExceptions = Exception.class,commandProperties = {
            @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "2500")}) //熔断器,调用不通,回调 error()方法    

5-2 SpringCloud快速开发入门:Hystrix 的服务降级与异常处理

  • 启动测试,可以看到客户端发生异常了

5-2 SpringCloud快速开发入门:Hystrix 的服务降级与异常处理
5-2 SpringCloud快速开发入门:Hystrix 的服务降级与异常处理