У меня класс с огромной нагрузкой на обработку, и для этого я использую очередь блокировки для каждого типа задач.
Очередь обрабатывается рекурсивно, пока что-то находится внутри очереди, следующая задача берется и отправляется для обработки.
В качестве примера кода это что-то вроде ( примечание: я использую Scala )
def executeNextTask(taskTypeId: String, task: SomeObjectType) = {
if(aTaskIsNotInProceesing(taskTypeId)){
CompletableFuture.supplyAsync(task, executorService)
.thenAccept(executeNextTask(taskTypeId))
}
}
Проблема в том, что внутри supplyAsync
могут возникать некоторые ошибки, и из-за обслуживания исполнителя они проглатываются, и я не могу их поймать.Иногда приложение не отвечает, и я предполагаю, что из-за постоянных исполнителей.
Стоит упомянуть, что все происходит внутри экосистемы Java EE.
Мой вопрос к вам:как я могу безопасно перехватить ошибку и как защитить свой код, чтобы он был согласованным?