netflix的工作流程图解析下

一 工作流程

netflix的工作流程图解析下_第1张图片

二 fallback处理

当命令执行失败的时候,Hystrix会进入fallback尝试回退处理,通常该处理也叫“服务降级”。引起服务降级的有下面几种情况:

  • 当前命令处于“熔断/短路”状态,断路器是打开的时候。

  • 当前命令的线程池、请求队列或者信号量被占满的时候。

  • HystrixObservableCommand.construct()或HystrixCommand.run()抛出异常的时候。

在服务降级逻辑中,我们需要实现一个通用响应结果,并且该结果的处理逻辑应当从缓存或是根据一些静态逻辑来获取,而不是依赖网络请求获取。如果一定要在服务降级逻辑中包括网络请求,那么该请求也必须包含在HystrixObservableCommand或HystrixCommand中,从而形成级联的降级策略,而最终的降级策略一定不是一个依赖网络请求的处理,而是一个能稳定返回结果的处理逻辑。

在HystrixObservableCommand和HystrixCommand中,实现的降级逻辑时还有所不同:

  • 当使用HystrixCommand的时候,通过HystrixCommand.getFallback()来实现服务降级逻辑。

  • 当使用HystrixObservableCommand的时候,通过HystrixObservableCommand.resumeWithFallback()实现服务降级逻辑,该方法会返回一个Observable对象来发射一个或多个结果。

当命令的降级逻辑返回结果之后,Hystrix就会将结果返回给调用者。

  • 当使用HystrixCommand.getFallback()的时候,它会返回一个Observable对象,该对象会发射getFallback()的处理结果。

  • 当使用HystrixObservableCommand.resumeWithFallback()实现的时候,它会将Observable对象直接返回。

如果没有为命令实现降级逻辑或者降级处理逻辑中抛出异常,Hystrix依然会返回一个Observable对象,但是它不会发射任何结果数据,而是通过OnError方法通知命令立即中断请求,并通过OnError()方法将引起命令失败的异常发送给调用者。

实现一个有可能失败的降级逻辑时一种很糟糕的做法,我们应该尽量避免。

当然完全不可能出现失败的完美策略是不存在的,如果降级执行发现失败的情况,Hystrix会根据不同的执行方法做出不同的处理。

  • execute():抛出异常。
  • queue():正常返回Future对象,但是当调用get()来获取结果的时候会抛出异常。
  • observe():正常返回Observable对象,当订阅它的时候,将立即通过调用订阅者的OnError方法来通知中止请求。
  • toObservable():正常返回Observable对象,当订阅它的时候,将立即通过调用订阅者的OnError方法来通知中止请求。

三 返回成功响应

当Hystrix命令执行成功之后,它将处理结果直接返回或通过Observable的形式返回。具体请见下图:

netflix的工作流程图解析下_第2张图片

  • toObservable():返回原始Observable,必须通过订阅它才会真正触发命令执行。
  • observe():在toObservable()产生原始Observable之后立即订阅它,让命令能够马上开始异步执行,并返回一个Observable对象,当调用它的subscribe时,将重新产生的结果通知给订阅者。
  • queue():将toObservable()产生原始Observable通过toBlocking()方法转换成BlockingObservable对象,并调用它的toFuture()方法返回异步的Future对象。
  • execute():在queue()产生异步结果Future对象之后,通过调用get()方法阻塞并等待结果。

你可能感兴趣的:(微服务)