Возможно, вы захотите взглянуть на ConnectableFlux
, что похоже на Flux
, но специально разработано для непрерывного излучения элементов.Вы можете создать объект WebClient
, который по умолчанию генерирует Mono через метод обмена.Затем просто обратитесь к маршруту, который вы создали в своем классе LogRailerController, для вызова метода канала.
public void connectFeed() {
ConnectableFlux<String> printEverySecond = WebClient.create("/") // Since your route is "/"
.post()
.body(...)
.exchange() // produces a Mono object
.flatMap(response -> response.bodyToMono(String.class)) // transformed into a Mono<String>
.flux() // now a Flux<String>
.replay(Duration.of(1, ChronoUnit.SECONDS))
.publish(); // now a ConnectableFlux<String>
printEverySecond.subscribe();
printEverySecond.connect();
}
Вместо использования post().getBody()
... flatMap(...)
, вы также можете просто использовать get (),и позвоните .bodyToMono(String.class)
сразу после .exchange
.
Делая это, вы даже помещаете свою логику feed()
в flatMap.Основная проблема этой стратегии, а также при использовании @RestController
, заключается в том, что время ожидания запроса истекает, что довольно сложно с помощью RxNetty.С учетом вышесказанного, я бы рекомендовал иметь отдельный класс компонента, который вызывает ClientClass.printEverySecond (), когда он возвращается после 10 повторов, или каждые 10 секунд, или в зависимости от того, что вы считаете лучшим.Преимущество этой стратегии перед использованием @RestController
заключается именно в том, что ее можно вызывать из другого класса так же, как вы вызываете любой другой метод bean-компонента.
Обратите внимание, что все темы здесь относятся к области начального этапа.зависимость от webflux - я не думаю, что вам понадобятся другие.