山一程--架构设计--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 做出决策 .

浙公网安备 33010602011771号