RxJava运算符,可动态缓冲反压元素并批量发出它们

时间:2018-11-14 15:09:04

标签: rx-java rx-java2 reactivex

我有一个Flowable,它发出需要由昂贵的操作处理的事件,该操作需要元素数组:

Flowable<T> src
void expensiveOp(List<T> batch)

除了使用恒定窗口外,我还想指定一个 max 元素的窗口,该窗口在下游繁忙时以及在充满反压时填充:

int maxSize = 1024
src.dynamicWindow(maxSize).subscribe(expensiveOp)

因此,窗口的大小既不应是固定时间也不是元素,而应取决于反压。当订户准备处理下一个元素时,应刷新缓冲区。

我缺少什么重载方法?

可能的扩展名是minSize参数和一种重试机制,该机制会随着窗口的增加而重试。

1 个答案:

答案 0 :(得分:0)

我最近遇到了这个问题,这是我的原始答案:https://stackoverflow.com/a/55136139/883330

快速解答。我的实现支持基于时间和基于计数的缓冲区的反压:https://gist.github.com/driventokill/c49f86fb0cc182994ef423a70e793a2d