Hystrix服务隔离

5 篇文章 0 订阅
4 篇文章 0 订阅

目录

 

一、用途

二、实现策略

2.1、线程隔离

2.2、单个依赖超时控制

2.3、熔断器控制

三、code 示例


一、用途

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

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

错能力。(复制过来的)

二、实现策略

2.1、线程隔离

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

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

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

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

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

2.2、单个依赖超时控制

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

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

2.3、熔断器控制

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

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

三、code 示例

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));
            }
        });

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值