Например
Observable
создает 1000 элементов в секунду, а Observer
обрабатывает 1 элемент в секунду. Observable
имеет бесконечный буфер, в который будут добавляться элементы до тех пор, пока не случится OutOfMemoryError
.В случаях когда возможна ситуация backpressure, следует использовать
Flowable
в качестве Rx-стрима.Flowable
можно создать из Observable
методом toFlowable()
, который принимает объект типа BackpressureStrategy
как параметр.BackpressureStrategy
– это enum
, который задает стратегию обработки backpressure. Значения BackpressureStrategy
:•
MISSING
. Продюсер не имеет стратегию работы с backpressure. В этом случае консьюмер должен решать проблему переполнения. Эта конфигурация полезна в случае, когда обработка backpressure задается операторами onBackpressure...()
.Если backpressure не обрабатывается, то будет брошено исключение
MissingBackpressureException
.•
ERROR
. В случае backpressure бросается исключение MissingBackpressureException
.•
BUFFER
. Все элементы добавляются в буфер, пока не будут обработаны консьюмером.•
DROP
. Все новые элементы, которые консьюмер не успевает обработать, удаляются и не доставляются консьюмеру.•
LATEST
. Стратегия противоположная Drop. Консьюмер получает только самый последний элемент, созданный продюсером, когда освобождается.Подробнее про backpressure.