Оператор RxJava, который динамически буферизует элементы с обратным давлением и генерирует их пакетами - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть Flowable, который генерирует события, которые должны быть обработаны дорогостоящей операцией, которая ожидает массивы элементов:

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

Кроме использования постоянного окна, я хотел бы указать окно max элементов, которые заполняются, когда нисходящий поток занят, а когда он заполнен, только обратные давления:

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

Поэтому размер окна не должен быть постоянным или элементным, а зависеть от обратного давления.Буфер должен быть очищен, когда подписчик готов обработать следующий элемент.

Какой перегруженный метод мне не хватает?

Возможными расширениями могут быть параметр minSize и механизм повторных попыток, который повторяет попытку с помощьюувеличенное окно.

1 Ответ

0 голосов
/ 13 марта 2019

Я недавно столкнулся с проблемой, и вот мой оригинальный ответ: https://stackoverflow.com/a/55136139/883330

Для быстрого ответа. Моя реализация для поддержки противодавления со временем и счетчиком буфера: https://gist.github.com/driventokill/c49f86fb0cc182994ef423a70e793a2d

...