Project Reactor разделил издателя на двоих с минимум двумя подписчиками - PullRequest
0 голосов
/ 12 октября 2019

Как вы можете разделить издателя на два в Reactor, чтобы существовали два потока данных, идентичных для работы в нисходящем направлении в разных потоках?

Таким образом, я могу сопоставить каждый поток и подписаться индивидуально накаждый поток.

Я не вижу ничего в API, который предполагает, что это на API .

Мне нужно подождать, пока оба подписчика будут готовы и готовы к публикации.

1 Ответ

1 голос
/ 12 октября 2019

Спасибо за ввод, не думал здраво, конечно, просто иметь несколько подписчиков, как это:

  val flux = Flux.just("MyData1", "MyData2", "MyData3");

  flux.doOnNext { println("Subscribing one$it") }.subscribe()

  flux.doOnNext { println("Subscribing Two$it") }.subscribe()

Будет выводить:

Subscribing oneMyData1
Subscribing oneMyData2
Subscribing oneMyData3
Subscribing TwoMyData1
Subscribing TwoMyData2
Subscribing TwoMyData3

Как указано выше, есть Share , но этот API не позволяет устанавливать минимальное количество подписчиков, поэтому лучше вызывать нижележащие функции, так что в моем случае я хочу подождать, пока у нас не будет двух подписчиков. Документы заявляют

a Поток, который при первой подписке приводит к тому, что исходный Поток подписывается один раз, поэтому поздние подписчики могут пропустить элементы.

val flux = Flux.just("MyData1", "MyData2", "MyData3").publish().refCount(2)

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

Subscribing oneMyData1
Subscribing TwoMyData1
Subscribing oneMyData2
Subscribing TwoMyData2
Subscribing oneMyData3
Subscribing TwoMyData3
...