Интересно, как написать неблокирующий код с Webflux.
Вот что я хочу сделать:
- Получить все продукты по полю
ProductProperties
(возвращается как Flux) - Получить список значений из
Flux<Product>.availabilityCalendar
Использовать данные, полученные на шаге 2, и извлечь некоторые другие данные (возвращаемые как Flux <>) - все должно быть неблокирующими операциями.
Как это сделать? Как получить значения из Flux<Object>
, а затем извлечь некоторые другие данные, возвращаемые как Flux <>, избегая операций блокировки, таких как Flux.block (), для получения данных, необходимых на следующем шаге для извлечения окончательных данных для возврата?
public Flux<Product> getAllProductsByAvailability(Flux<ProductProperties> productProperties,
Map<String, String> searchParams) {
productProperties
.flatMap(property -> productRepository.findByProductPropertiesId(property.getId())) //1. return Products
.flatMap(product -> Flux.just(product.getAvailabilityCalendar())) //2. how to get Product.availabilityCalendar list as non-blocking operation to work with this data afterwards?
(...)
где:
productRepository.findByProductPropertiesId
возвращает Flux
Продукт имеет поле: ArrayList<ProductAvailability> availabilityCalendar
Это хороший подход?
Спасибо!