Project Reactor: как потоки будут создаваться в случае подписки и публикации, как идет поток ?, Трассировка стека? - PullRequest
0 голосов
/ 06 мая 2020

простой пример для понимания потока потока.

  1. [ gshp subscribedOn-1 ] INFO Reaction.Flux.FlatMap.1 - onSubscribe ( FluxFlatMap.FlatMapMain )

  2. [ gshp publishOn-7 ] ИНФОРМАЦИЯ response.Flux.FlatMap.1 - onNext (6)

Здесь response.Flux.FlatMap.1 общий для обоих gshp subscribedOn-1 , gshp publishOn-7

Когда мы запускаем java, он запускается с основным потоком после этого, что происходит, будет ли он создавать gshp subscribedOn-1 или response.Flux. FlatMap.1 ?

  @Test
  public void setUpTestTest() {
      Scheduler scheduler1 = Schedulers.newParallel("gshp subscribedOn", 3);
      Scheduler scheduler2 = Schedulers.newParallel("gshp publishOn", 6);
      Flux<String> flux = Flux.range(1, 200)
                              .flatMap(s-> Flux.just(""+s)
                                               .publishOn(scheduler2)
                                               .concatMap(d->processMessagefluxpause(d, "test")))
                                               .log()
                              .subscribeOn(scheduler1);

    StepVerifier.create(flux).expectNextCount(20).verifyComplete();
}

Что значит, как идет поток? enter image description here

1 Ответ

2 голосов
/ 06 мая 2020

здесь вы можете прочитать о subscribeOn и publishOn.

publishOn vs subscribeOn

в основном, как только кто-то подписывается, создается вся цепочка и вызову назначается поток. Если у вас есть где-нибудь a subscribeOn в цепочке, весь вызов будет использовать этот планировщик. Таким образом, не имеет значения, где находится subscribeOn.

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

onPublish с другой стороны, как только мы достигаем этого оператора, поток переключается на этот планировщик на полпути. Так что это больше зависит от того, где он находится в цепочке.

Ваши журналы показывают, что когда внутренний поток испускает, он излучает в планировщике onPublish.

...