Приходится проходить supervision.decider
но в акке 2.6.0+ Materializer
нет подобных настроек.
Может ли кто-нибудь поделиться, как написать код ниже в более высокой версии:
val mat: ActorMaterializer = ActorMaterializer(Actor Materializersettings(supervision.decider))
Попробовал новый способ, не выбирая, как того требует класс стратегии String
:
1.
val mat: Materializer = Matrializer(actorsystem)
mat.system.settings.supervisionstratgyclass = ???
ActorAttributes(supervision.decider)
Будем признательны за любую идею, как передать стратегию наблюдения через материализатор.
Как мы передаем индивидуальную стратегию контроля в настройках? Я не использую потоки. Это будет простой стартовый вызов с материализатором.
Похоже, вы хотите настроить стратегию наблюдения за потоком. Вот несколько примеров того, как это сделать из официальной документации: Ошибка потока - стратегии контроля.
Как видите, в следующем примере для исполняемого графа устанавливается стратегия контроля по умолчанию.
val decider: Supervision.Decider = {
case _: ArithmeticException => Supervision.Resume
case _ => Supervision.Stop
}
val source = Source(0 to 5).map(100 / _)
val runnableGraph =
source.toMat(Sink.fold(0)(_ + _))(Keep.right)
val withCustomSupervision = runnableGraph.withAttributes(ActorAttributes.supervisionStrategy(decider))
В другом случае стратегия надзора определяется на уровне Flow
.
val decider: Supervision.Decider = {
case _: ArithmeticException => Supervision.Resume
case _ => Supervision.Stop
}
val flow = Flow[Int]
.filter(100 / _ < 50)
.map(elem => 100 / (5 - elem))
.withAttributes(ActorAttributes.supervisionStrategy(decider))
val source = Source(0 to 5).via(flow)
Ой, извини. Судя по тегам поста, я подумал, что вы работаете с akka-streams. В этом случае вам нужно будет использовать Behaviors.supervise(behavior).onFailure(supervisorStrategy)
. Этот помощник позволит вам контролировать актера (Behavior
), а затем вызвать метод onFailure
, чтобы решить, какую стратегию наблюдения вы хотите применить в зависимости от ваших потребностей. В официальных документах Akka — отказоустойчивость есть хорошие примеры того, как это сделать
Спасибо за отзыв. Я не использую никаких потоков. Это простой запуск, и вы хотите выйти из системы в качестве пользовательской стратегии принятия решений в случае исключения. Глядя на реализацию с новыми изменениями материализатора.