ThreadPoolTaskExecutor тупик - PullRequest
       18

ThreadPoolTaskExecutor тупик

0 голосов
/ 06 июля 2018

Наше приложение использует Spring @Async для запуска асинхронных задач (например, для параллельных вызовов API REST). Наш ThreadPoolTaskExecutor был сконфигурирован с 16 размерами основного пула, 128 максимальными пулами и 128 размерами очереди.

Асинхронные задачи могут запускать больше асинхронных задач и т. Д., Они могут стать довольно глубоко вложенными. При наличии достаточного количества одновременных запросов в сочетании с медленным временем отклика на называемый REST API мы легко можем оказаться в тупике. Все задачи в основном пуле ожидают результатов от дочерних задач в очереди. Дочерние задачи в очереди не будут выполнены, поскольку основной пул заполнен. Таким образом, тупик.

Асинхронные методы выглядят так: @Async public Future<String> asyncCallAPI() { return new AsyncResult<>(callAPI()); }

Как лучше всего избежать этих тупиков?

...