@[TOC]

大家好 我是周杰伦本人 欢迎关注我❤️

RxJava的操作符(二)

聚合操作符

count操作符就是数据项进行统计,然后输出

String[] items = {"one", "two", "three","fore"};
        Integer count = Observable
                .from(items)
                .count()
                .toBlocking().single();
        log.info("计数的结果为 {}",count);

输出结果为4,Observable.toBlocking()是返回BlockingObservable阻塞实例,然后single()方法是阻塞当前线程,直到输出唯一的一个元素,如果有多个就会抛出异常。

reduce操作符和scan操作符差不多,scan操作符每次都要输出结果,reduce操作符只会输出最后的结果

其他操作符

take操作符是挑选前n个元素,skip操作符是跳过前n个元素

window操作符是按照固定数量n进行分组

List<Integer> srcList = Arrays.asList(10, 11, 20, 21, 30, 31);

Observable.from(srcList)
        .window(3)
        .flatMap(o -> o.toList())
        .subscribe(list -> log.info(list.toString()));

window(3)就是对数组按3个一组进行分组,window方法还可以有两个参数,
window(3, 1)就是按照3个一组,间隔为1

HystrixCommand

HystrixCommand用来封装RPC的调用,它有异步执行能力和同步执行能力,先进行缓存是否命中,如果启用了缓存,就可以使用缓存响应请求,、再判断熔断器是否打开,如果熔断开启了直接调用HystrixCommand的getFallback()方法进行服务降级处理,如果熔断器没有开启就判断线程池是否满了,然后没有满就开始执行run方法,如果满了同样执行getFallback()方法进行服务降级处理,自定义HystrixCommand类的时候可以重写run()方法和getFallback()方法,当出现错误的时候执行getFallback()方法

Hystrix的健康统计滑动窗口的执行过程是首先HystrixCommand的执行结果会被弹出,然后桶计数流会按照固定时间长度划分滚动窗口,然后按照执行结果进行累积统计

总结

上篇文章介绍了RxJava部分操作符,这篇文章继续讲了RxJava的操作符,有聚合操作符和其他操作符包括window操作符,hystrix利用了window操作符进行健康统计等等,HystrixCommand是重要的一个类,主要实现它的run方法和getFallback()。