У меня есть веб-приложение, использующее spring-boot-2.2.5
У меня есть метод конечной точки, который получает много запросов, 1k / сек.
Этот метод выполняет следующие операции:
- Вызов других микросервисов
- выполнение операций с базой данных
- Вызов других микросервисов
- После всех операций объедините все результаты, чтобы ответить клиенту.
Я сделал следующее:
- Вызов других микросервисов -> Использование completetableFuture
- Вызов других микросервисов -> Использование completetableFuture
- Main thread do database database.
- После этого я жду, когда эти 2 асинхронные c операции будут выполнены.
Используя completetableFuture, я могу вызывать многие другие службы, выполняя другие операции, например Работа с базой данных, это хорошо, потому что мой метод не останавливается для каждой внешней операции.
Эта машина работает с 2 или 4 ядрами процессора.
Я кодировал так:
public ResponseObject getResponse() {
Supplier1 = Call of another microservices
var result1 = CompletableFuture.supplyAsync(supplier1);
Supplier2 = Call of another microservices
var result2 = CompletableFuture.supplyAsync(supplier2);
doDatabaseOperation();
doAnotherDatabaseOperation();
// code in order to block/wait result1, result2
// after that set response in the responseObject
return responseObject;
}
мой вопрос is:
Я не использую другой ExecutorService, я использую пул потоков по умолчанию, используемый spring, forkJoinPool.
Должен ли я использовать другой ExecutorService? Есть ли лучшая конфигурация Thread Pool для этого случая?