Spring boot forkJoinPool I / O Bound x еще один ExecutorService - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть веб-приложение, использующее 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 для этого случая?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...