onBackpressurDrop
всегда готов к приему предметов, поэтому onBackpressureBuffer
не имеет практического эффекта в вашей настройке. onBackpressurBuffer(int)
потерпит неудачу при переполнении, поэтому вы никогда не увидите ожидаемого поведения с ним. Кроме того, concatMap
по умолчанию выбирает 2 элемента заранее, поэтому он получает исходные элементы 1 и 2.
Вместо этого попробуйте использовать перегрузку с настраиваемой стратегией противодавления:
mRelay
.toFlowable(BackpressureStaregy.MISSING)
.onBackpressureBuffer(4, null, BackpressureOverflowStrategy.DROP_LATEST)
.flatMap(data ->
Flowable.intervalRange(0, DURATION.toLong(), 0, period, unit)
.takeUntil(getStopFlowable())
.map(it -> new Pair(data, it))
, 1 // <--------------------------------------------------- max concurrency
);