- Как я могу POST в кусках массивов?
Используйте один из вариантов Flux.window
для разделения основного потокав оконные потоки, а затем отправлять запросы с помощью оконных потоков через .flatMap
Flux<Car> flux1 = Flux.interval(Duration.ofMillis(250)).map(i -> new Car(i));
WebClient client = WebClient.create("http://localhost:8080");
Disposable disposable = flux1
// 1
.window(5)
.flatMap(windowedFlux -> client
.post()
.uri("/cars")
.contentType(MediaType.APPLICATION_JSON)
.body(windowedFlux, Car.class)
.exchange()
// 2
.doOnNext(response -> System.out.println(response.statusCode()))
.flatMap(response -> response.bodyToMono(...)))
.subscribe();
Thread.sleep(10000);
// 3
disposable.dispose();
Как мне захватить ответ для каждого POST-массива?
Вы можете проанализировать ответ через операторы после .exchange()
.
В приведенном мной примереответ можно увидеть в операторе doOnNext
, но вы можете использовать любой оператор, который работает с onNext
сигналами, например map
или handle
.
. Обязательно полностью прочитайте тело ответа.чтобы убедиться, что соединение возвращено обратно в пул (см. примечание ).Здесь я использовал .bodyToMono
, но любой метод .body
или .toEntity
будет работать.
Остановить передачу Flux?
При использовании метода subscribe
, как вы сделали, вы можете остановить поток, используя возвращенный disposable.dispose()
.
В качестве альтернативы, вы можете вернуть Flux из метода sendCars()
и делегировать подписку и удаление вызывающей стороне.
Обратите внимание, что в приведенном мною примере я просто использовал Thread.sleep()
для имитации ожидания.В реальном приложении вы должны использовать что-то более продвинутое и избегать Thread.sleep()