我有一个Flowable,它发出需要由昂贵的操作处理的事件,该操作需要元素数组:
Flowable<T> src
void expensiveOp(List<T> batch)
除了使用恒定窗口外,我还想指定一个 max 元素的窗口,该窗口在下游繁忙时以及在充满反压时填充:
int maxSize = 1024
src.dynamicWindow(maxSize).subscribe(expensiveOp)
因此,窗口的大小既不应是固定时间也不是元素,而应取决于反压。当订户准备处理下一个元素时,应刷新缓冲区。
我缺少什么重载方法?
可能的扩展名是minSize参数和一种重试机制,该机制会随着窗口的增加而重试。
答案 0 :(得分:0)
我最近遇到了这个问题,这是我的原始答案:https://stackoverflow.com/a/55136139/883330
快速解答。我的实现支持基于时间和基于计数的缓冲区的反压:https://gist.github.com/driventokill/c49f86fb0cc182994ef423a70e793a2d