@[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()。