Hystrix服务隔离

匿名 (未验证) 提交于 2019-12-02 23:42:01

Ŀ¼


Hystrix(https://github.com/Netflix/Hystrix)是Netflix(https://www.netflix.com/global)的一个开源

项目,主要作用是通过控制那些访问远程系统、服务和第三方库的节点,从而对延迟和故障提供更强大的容

错能力。(复制过来的)

上图当前service1异常时候,此时service1来了大量的请求,请求一直继续过来,

一直消耗CPU资源,当CPU资源消耗完了之后,会导致整个项目宕机,不仅使得service1

不能提供正常服务,而且还影响了service2和service3服务。

为了解除此种场景,Hystrix提供了线程隔离。其原理是为每个服务创建一个线程池,

每次请求过来请线程池获取请求资源,线程池中封装了service提供的服务。

单个依赖可以配置超时时间,当前规定时间未获取结果,可直接走callback逻辑。对于不同的处理结果,自定义化处理结果内容和逻辑。

返回结果分别为:成功,失败(抛出异常),超时,线程拒绝,短路。

时间控制:withCircuitBreakerSleepWindowInMilliseconds 超过阈值走getFallback 接口

成功率控制:withCircuitBreakerErrorThresholdPercentage 超过阈值走getFallback 接口

Hystrix三种执行方式:

(1)同步模式

  HelloWorldCommand tb=new HelloWorldCommand(newOrderId);  result = tb.execute();

(2)异步模式

 HelloWorldCommand yb = new HelloWorldCommand(newOrderId); Future<OrderDTO> future = yb.queue(); result = future.get(1, TimeUnit.SECONDS);

(3)观察者模式

 //观察者模式调用         Observable<OrderDTO> gc = new HelloWorldCommand(newOrderId).observe();         //注册完整执行生命周期事件         gc.subscribe(new rx.Observer<OrderDTO>() {             @Override             public void onCompleted() {                 // onNext/onError完成之后最后回调                 System.out.println("执行完成回调逻辑");             }              @Override             public void onError(Throwable e) {                 // 当产生异常时回调                 System.out.println("onError " + e.getMessage());                 e.printStackTrace();             }              @Override             public void onNext(OrderDTO v) {                 // 获取结果后回调                 System.out.println("获取结果回调函数: " + JSON.toJSONString(v));             }         });

文章来源: https://blog.csdn.net/CCCdingding/article/details/91879522
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!