Блокировка вызовов с помощью Reactive Spring Data Cassandra - PullRequest
0 голосов
/ 21 апреля 2020

Я sh, чтобы понять, как Reactive Spring Data Cassandra заботится о параллелизме? Использует ли он модель Event L oop?

Итак, у нас есть Spring Webflux, который использует Netty вместе с Reactive Spring Data Cassandra, где Netty имеет свой собственный пул потоков, а Reactive Spring Data Cassandra имеет свой собственный пул.

В нашем Rest Controller один из наших методов GET использует следующий фрагмент кода.

return personRepository.findAll()
   .map(person -> doSomeComputeIntensivetask(person))
   .filter(person -> person.getAge()>30);

Теперь мы поняли, что пул Netty не выполняет метод findAll, вместо этого Reactive Spring. Дата Кассандра выполняет его. Поток не переключается обратно на Netty Pool, вместо этого он продолжает использовать Spring Data Cassandra Thread Pool. Означает ли это, что потоки Spring Data Cassandra блокируются? Означает ли это, что в случае слишком большого количества вызовов сервер может вернуть 503 Service Unavailable, поскольку не будет никаких потоков для выполнения запросов к БД?

У нас также есть Kafka Consumer, поэтому я просто хотел понять смысл использования

personRepository.findByDate(date).collectList().block();

вместо

personRepository.findByDate(date).subscribe();

внутри Kafka Consumer.

Какую модель параллелизма использует Reactive Spring Data Cassandra для внутреннего использования? Это что-то похожее на CompletableFutures? Также можно ли настроить размер пула потоков для Reactive Spring Data Cassandra?

...