Akka Stream, как определить внутри GraphStageLogic, не удалось ли это - PullRequest
0 голосов
/ 14 марта 2019

У меня есть сеть узлов, все реализованные с использованием пользовательских GraphStageLogic. Я не могу найти API, чтобы определить, когда этап генерирует исключение (например, IllegalArgumentException для Cannot pull port). Единственное, что делает Akka - это обрывает нисходящие соединения. Мне нужно определить, например, в postStop или с помощью обратного вызова, когда узел отключается из-за исключительной ситуации во время выполнения и распространяет эту информацию в Promise, который контролирует состояние всей системы. Использование withAttributes(supervisionStrategy) также не имеет никакого эффекта. Мне кажется удивительным, что нет способа отслеживать исключения, выдаваемые внутри GraphStageLogic? failStage является окончательным, как и в целом весь API GraphStageLogic.

1 Ответ

0 голосов
/ 15 марта 2019

Использование decider при определении ActorMaterializer, используемого для материализации Графа, должно работать:

implicit val materializer: ActorMaterializer = ActorMaterializer(
      ActorMaterializerSettings(actorSystem).withSupervisionStrategy(decider))

где решающее значение является типичным

val decider: Supervision.Decider = {
  case e: IllegalArgumentException => ....
}
...