Webflux горячий и холодный паблишеры

В Spring WebFlux холодный паблишер можно реализовать с помощью класса Flux, а горячий – с помощью класса ConnectableFlux.


Вот пример того, как реализовать холодный паблишер с помощью Flux:

@GetMapping("/cold-publisher")
public Flux<String> coldPublisher() {
    return Flux.fromIterable(Arrays.asList("Apple", "Banana", "Cherry", "Durian", "Eggplant"));
}

В этом примере мы возвращаем Flux, который генерирует список строк. Поскольку это холодный паблишер, список будет формироваться каждый раз, когда на Flux подпишется новый подписчик.


Вот пример того, как реализовать горячий паблишер с помощью ConnectableFlux:

@GetMapping("/hot-publisher")
public ConnectableFlux<Long> hotPublisher() {
    return Flux.interval(Duration.ofSeconds(1)).publish();
}

В этом примере мы возвращаем ConnectableFlux, который каждую секунду выдает значение long. Поскольку это горячий паблишер, ConnectableFlux начнет выдавать значения, как только он будет создан, независимо от того, появились ли у него какие-либо подписчики. Мы также вызываем метод publish() в Flux, чтобы сделать его горячим. Этот метод возвращает ConnectableFlux, который можно подключить к нескольким подписчикам одновременно. Чтобы подключить ConnectableFlux, мы можем вызвать его метод connect().