hystrix文档翻译之如何使用

Hello World!

  使用HystrixCommand实现“Hello World”。

public class CommandHelloWorld extends HystrixCommand<String> {
    private final String name;
    public CommandHelloWorld(String name) {
        super(HystrixCommandGroupKey.Factory.asKey("ExampleGroup"));
        this.name = name;
    }
    @Override
    protected String run() {
        // a real example would do work like a network call here
        return "Hello " + name + "!";
    }
}

  使用HystrixObservableCommand实现“Hello World”。

public class CommandHelloWorld extends HystrixObservableCommand<String> {
    private final String name;
    public CommandHelloWorld(String name) {
        super(HystrixCommandGroupKey.Factory.asKey("ExampleGroup"));
        this.name = name;
    }
    @Override
    protected Observable<String> construct() {
        return Observable.create(new Observable.OnSubscribe<String>() {
            @Override
            public void call(Subscriber<? super String> observer) {
                try {
                    if (!observer.isUnsubscribed()) {
                        // a real example would do work like a network call here
                        observer.onNext("Hello");
                        observer.onNext(name + "!");
                        observer.onCompleted();
                    }
                } catch (Exception e) {
                    observer.onError(e);
                }
            }
         } ).subscribeOn(Schedulers.io());
    }
}

同步执行

  使用HystrixCommand的execute方法同步执行。

String s = new CommandHelloWorld("World").execute();

  HystrixObservableCommand没有execute方法,但如果你确定Observable只会返回一个单一结果,你可以使用.toBlocking().toFuture().get()方法。

异步执行

  使用HystrixCommand的queue()方法实现异步:

Future<String> fs = new CommandHelloWorld("World").queue();

  通过get方式获得结果

String s = fs.get();

  HystrixObservableCommand没有queue方法,但如果你确定Observable只会返回一个单一结果,你可以使用.toBlocking().toFuture()方法。

响应执行

  通过下面两个方法可以获取Observable对象。

  • observe,返回一个Observable并且立即执行命令,因为observe方法内部使用了一个RepaySubject,所以也会接受到监听以前命令返回的结果。
  • toObservable,返回一个Observable但不回立即执行,当监听该对象时才执行。
Observable<String> ho = new CommandHelloWorld("World").observe();
// or Observable<String> co = new CommandHelloWorld("World").toObservable();
ho.subscribe(new Action1<String>() {
    @Override
    public void call(String s) {
         // value emitted here
    }
});

  使用单元测试执行

@Test
public void testObservable() throws Exception {

    Observable<String> fWorld = new CommandHelloWorld("World").observe();
    Observable<String> fBob = new CommandHelloWorld("Bob").observe();

    // blocking
    assertEquals("Hello World!", fWorld.toBlockingObservable().single());
    assertEquals("Hello Bob!", fBob.toBlockingObservable().single());

    // non-blocking
    // - this is a verbose anonymous inner-class approach and doesn‘t do assertions
    fWorld.subscribe(new Observer<String>() {

        @Override
        public void onCompleted() {
            // nothing needed here
        }

        @Override
        public void onError(Throwable e) {
            e.printStackTrace();
        }

        @Override
        public void onNext(String v) {
            System.out.println("onNext: " + v);
        }

    });

    // non-blocking
    // - also verbose anonymous inner-class
    // - ignore errors and onCompleted signal
    fBob.subscribe(new Action1<String>() {

        @Override
        public void call(String v) {
            System.out.println("onNext: " + v);
        }

    });
}

响应式命令

  除了使用上面的方式来获取Observable对象,还可以通过HystrixObservableCommand来创建一个Observable对象。HystrixObservableCommand可以创建一个返回多个值的Observable对象。HystrixObservableCommand使用consruct方法来执行命令而不是run方法。通过一下两种方式来获取Observable对象:

  • observe,返回一个Observable并且立即执行命令,因为observe方法内部使用了一个RepaySubject,所以也会接受到监听以前命令返回的结果。
  • toObservable,返回一个Observable但不回立即执行,当监听该对象时才执行。

降级

  通过添加fallback方法可以让命令执行异常时执行降级措施。你会为大多数的hystrix 命令实现降级方法,除了一下的情况:

  • 命令执行写操作

  如果hystrix命令是被设计成一个写操作而非读操作(HystrixCommand命令返回void或者HystrixObservableCommand返回一个空的Observable对象)。那么没有什么实现fallback方法。如果写出错了,应该把异常抛出给调用方。

  • 执行批量计算

  如果hystrix命令使用了缓存、或者批量、或者离线技术,也应该把异常抛给调用方,让调用放过处理而不是降级。

  无论你的命令是否有fallback,hystrix状态和熔断器状态都会更新。

  

时间: 2024-10-23 11:42:12

hystrix文档翻译之如何使用的相关文章

hystrix文档翻译之概述

Hystrix是什么 在一个大型的分布式系统中,难免有些依赖服务会失败.hystrix通过容错逻辑来控制不同服务间的交互.hystrix通过隔离各服务交互节点来防止连级错误,并且提供降级功能,最终保证系统的可靠性. hystrix的历史 略 hystrix作用 hystrix被设计来解决一下问题: 通过控制调用第三方包时的延时和错误来提供保护. 避免复杂系统的连级错误. 对于错误快速失败和恢复. 当异常出现是提供降级服务. 实时的监控,高警,和其他控制选项. hystrix解决哪些问题 一个复杂

hystrix文档翻译之开始使用

获取包 使用maven获取包. <dependency> <groupId>com.netflix.hystrix</groupId> <artifactId>hystrix-core</artifactId> <version>x.y.z</version> </dependency> 使用lvy获取包 <dependency org="com.netflix.hystrix" na

hystrix文档翻译之工作原理

流程图 下面的图片显示了一个请求在hystrix中的流程图. 1.构造一个HystrixCommand或者HystrixObservableCommand对象 第一步是创建一个HystrixCommand或者HystrixObservableCommand对象来执行依赖请求.创建时需要传递相应的参数. 如果请求只返回一个单一值,使用HystrixCommand. HystrixCommand command = new HystrixCommand(arg1, arg2); 如果希望返回一个Ob

hystrix文档翻译之插件

插件 可以通过实现插件来改变Hystrix的行为.可以通过HystrixPlugins来注册自定义插件,这些插件会被应用到HystrixCommand,HystrixObservableCommand和HystrixCollapser. 插件类型 事件通知 在HystrixCommand和HystrixObservableCommand执行过程中会触发一些时间,实现HystrixEventNotifier可以监听这些事件进行一些告警和数据收集. 发布metrics 通过实现HystrixMetr

Lua2.4 文档翻译

Lua2.4 文档翻译完了,这次的翻译感觉和 Lua1.1 的时候有点不一样. 这次也是在业余时间里断断续续的完成的,所以,进度也同样是比较慢. 这次的翻译内容明显比 Lua1.1 的时候多了很多,1.1 的时候手册是 19 页,这次的手册是 38 多页.不过,算一算,1.1 的时候是两个文档,加在一起的话就和 2.4 差不多了. 翻 译时是以 1.1 做为基础的,在翻译的过程中顺便发现 1.1 的不少的翻译错误之处.好的是基本上都是比较低级的错误,比如输入错误和句子明显的不通顺.就不在老版本上

笔记:Spring Cloud Feign Hystrix 配置

在 Spring Cloud Feign 中,除了引入了用户客户端负载均衡的 Spring Cloud Ribbon 之外,还引入了服务保护与容错的工具 Hystrix,默认情况下,Spring Cloud Feign 会为将所有 Feign客户端的方法都封装到 Hystrix 命令中进行服务保护,需要注意的是 Ribbon 的超时与 Hystrix 的超时是二个概念,需要让 Hystrix 的超时时间大于 Ribbon 的超时时间,否则 Hystrix 命令超时后,该命令直接熔断,重试机制就没

spring cloud 学习(4) - hystrix 服务熔断处理

hystrix 是一个专用于服务熔断处理的开源项目,当依赖的服务方出现故障不可用时,hystrix有一个所谓的断路器,一但打开,就会直接拦截掉对故障服务的调用,从而防止故障进一步扩大(类似中电路中的跳闸,保护家用电器). 使用步骤:(仍然在之前的示例代码上加以改造) 一.添加hystrix依赖 compile 'org.springframework.cloud:spring-cloud-starter-hystrix' 二.在需要熔断的方法上添加注解 package com.cnblogs.y

第五章 服务熔断(hystrix)+ retrofit底层通信(AsyncHttpclient)

一.集群容错 技术选型:hystrix.(就是上图中熔断器) 熔断的作用: 第一个作用: 假设有两台服务器server1(假设可以处理的请求阈值是1W请求)和server2,在server1上注册了三个服务service1.service2.service3,在server2上注册了一个服务service4,假设service4服务响应缓慢,service1调用service4时,一直在等待响应,那么在高并发下,很快的server1处很快就会达到请求阈值(server1很快就会耗尽处理线程)之后

Hibernate 3.3.2 文档翻译 Day01

Hibernate 3.3.2 文档翻译 翻译人:微冷的雨 第一次书写:2015年11月29日 本人呕心沥血之作,请细心阅读领悟! Day01-1.1 项目描述 微冷的雨翻译:例如,我们将要建立一个可以存储我们关注的events(注:实体集合)和相关信息的小型数据库应用. 注意(Tip):虽然你可以使用任何你感觉合适的数据库,我们将使用HSQLDB(内存级别)这款数据库,以避免对数据库服务器的安装. Day01-1.1.1 项目构建 微冷的雨翻译:我们的首要工作是搭建开发环境.我们将使用我们提倡