Spring Cloud Netflix Hystrix介绍和使用

前面我们搭建了具有服务降级功能的Hystrix客户端,现在我们来详细了解下Hystrix的一些功能。

Spring Cloud Netflix Hystrix介绍和使用

Hystrix的意思是豪猪,大家都知道,就是长满刺的猪。。。实际上,它表明了该框架的主要功能:自我保护功能。Hystrix具有服务降级,熔断,线程池隔离,信号量隔离,缓存等功能,基本上能覆盖到微服务中调用依赖服务会遇到的问题。下面我们介绍下,如何理解和使用这些功能。

1、最常用的的服务降级功能

  当执行调用服务方法时,若调用方法出现问题,如:请求超时,抛出异常,线程池拒绝,熔断这些情况下,为该方法定义降级方法,以便在出现问题时执行,实现备用返回。之前我们已经实现了服务降级功能,主要就是通过@HystrixCommand(fallbackMethod = "defaultMethod")注释到需要在出现问题时降级的方法。fallbackMethod指定降级后执行的方法。方法定义在该类中,public,private,protected都可以。在注释的方法出问题后,如超时未返回(execution.isolation.thread.timeoutinMilliseconds来配置),就会执行备用方法,返回备用方法的返回值。当然,降级的方法也可以定义再下一级的降级方法,实现和上面一样。

  上面说到方法抛出异常也会触发服务降级,但是如果我们自定义了异常,并需要将异常抛出给上层做操作,不希望Hystrix捕捉到自定义异常执行服务降级时,可以使用@HystrixCommand(ignoreExceptions = {MyException.class})来定义忽略捕捉的异常。多个异常用逗号隔开。也可以将抛出的异常通过入参传到降级的方法,来实现不同类型异常的不同处理,需要将降级方法定义如下。

@HystrixCommand(fallbackMethod = "back") public String getHello(String id) { return template.getForObject("http://helloclient/hello", String.class); } public String back(String id , Throwable e) { if (e instanceof NullPointerException) { return "client 2 has some error! NullPointerException"; } else { return "client 2 has some error! Exception"; } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwjzzf.html