山一程--架构设计--ReactiveArc--Java9 Flow RxJava

目的:使用 RxJava, 基于 Java 9 Flow API 进行反应式编程


reference:

https://rxmarbles.com/

data pipeline

1. flatMap: 不保证原始事件顺序,可以对上游的值进行并发计算。 如果要保持下游事件的顺序与上游事件顺序符合, concatMap 操作符。

笛卡尔乘积, 所有组合。

p60

2. merge() 使用场景, 遵循 Rx 契约,即便底层的流同时发布值,也能保证事件是序列化的。 .p62  mergetDalayError 保证收集所有的异常.不仅仅是第一个,并将它们封装到 rx.exceptions.CompositeException.

3.zip() zipWith : 将两个或更多的流,组合成一个单元,先组合第一个,然后再组合第二个事件。 


java 9  java.util.concurrent.Flow 只包含一个静态组件,无法实例化.

1. Publisher ; 2. Subscriber ; 3. Subscription ; 4. Processor

Publisher 生产的元素可以被一个或多个 Subscriber 消费, Publihser 与 Subscriber 之间的关系通过 Subscription 管理.

Publisher 是顺序事件的提供者,这些事件的数量可能无上限,受背压机制制约,按照 Subscriber 反馈进行元素的生产.

 


2021-06-20  12:36:26

数据流 

 


 


flatMap() 另一个变种不仅能够对事件做出反应,还能够对所有通知做出反应,也就是事件,错误通知,和完成通知.

flapMap() 简化签名进行重载:每个 Observable<T> 必须提供如下内容:

1. 映射单个 T -> Observable<R> 的函数.

2. 映射错误通知 -> Observable<R> 的函数。

3. 无参函数, 响应上游的完成通知并能够返回 Observable<R>


上传视频的服务,

该服务接受一个 UUID,并通过 Observable<Long> 返回上传进度,也就是传输了多少字节.

可按某种形式使用该进度信息,例如在用户界面对其展现.

真正关心的是它的完成信息,也就是上传何时最终完成。

订阅进度流,对完成通知。


良好实践:

如果不知道如何处理异常,让监管者 调用方法,父方法,或下游 Observable 做出决策 .


 

posted @ 2021-06-16 23:03  君子之行  阅读(10)  评论(0)    收藏  举报