publish()
превращает Flux
в горячий источник (а не в холодный источник). Это означает, что несколько подписчиков могут подписаться в любое время и увидеть все элементы в будущем, но они пропустят все элементы, отправленные заранее.
Так, каков случай использования Flux.publish ()?
Существует множество вариантов использования этого - возможно, это поток сообщений журнала, которые каким-то образом потребляются (и вас интересуют только сообщения журнала, которые появляются в режиме реального времени, а не предыдущие журналы). Возможно, это прямая трансляция трансляции спортивного матча. Возможно, это чат.
При кэшировании fluxOfData путем вызова fluxOfData.cache () результаты получаются, как и ожидалось.
Да, потому что тогда выЯвно кэширует все излучаемые сигналы, поэтому, несмотря на то, что они являются «горячим» источником, новые подписчики по-прежнему могут воспроизводить все существующие элементы в потоке.
Существует ли другой идиоматический способ преобразования данных в оба изображения иотчеты?
Рассмотрим replay()
вместо publish()
:
Превратите этот поток в горячий источник и сохраните последние испущенные сигналы для дальнейшегоАбонент. Сохранит неограниченное количество сигналов onNext. Завершение и ошибка также будут воспроизведены.
В более общем смысле это также будет хорошим фоновым чтением.