Безопасный способ отловить ошибку в готовом будущем с помощью службы исполнителя и правильный способ управления исполнителями. - PullRequest
0 голосов
/ 12 октября 2018

У меня класс с огромной нагрузкой на обработку, и для этого я использую очередь блокировки для каждого типа задач.

Очередь обрабатывается рекурсивно, пока что-то находится внутри очереди, следующая задача берется и отправляется для обработки.

В качестве примера кода это что-то вроде ( примечание: я использую Scala )

def executeNextTask(taskTypeId: String, task: SomeObjectType) = {
  if(aTaskIsNotInProceesing(taskTypeId)){
    CompletableFuture.supplyAsync(task, executorService)
      .thenAccept(executeNextTask(taskTypeId))
  }
}

Проблема в том, что внутри supplyAsync могут возникать некоторые ошибки, и из-за обслуживания исполнителя они проглатываются, и я не могу их поймать.Иногда приложение не отвечает, и я предполагаю, что из-за постоянных исполнителей.

Стоит упомянуть, что все происходит внутри экосистемы Java EE.

Мой вопрос к вам:как я могу безопасно перехватить ошибку и как защитить свой код, чтобы он был согласованным?

...