У меня есть вопрос о Behaviors.unhandled, я знаю, что Akka отправляет необработанное сообщение в Dead Letter и со следующей конфигурацией также регистрирует его
akka {
loglevel = "DEBUG"
actor {
debug {
# enable DEBUG logging of unhandled messages
unhandled = on
}
}
}
Ранее это обсуждалось в следующем выпуске Behaviours.unhandled и приводилось доводы в пользу типичного способа, которым Akka работает, это приемлемо и также должно регистрироваться только на уровне DEBUG.
В этот момент я, но приходит, конечный автомат является еще одним уровнем поверх Akka, и в концепциях конечного автомата эта ситуация относится к непреднамеренно управляемому переходу и, как утверждает первоначальный постер проблемы, является ошибкой, которая действительно важна в итеративном подходе. проектирование конечных автоматов.
Типичная конфигурация FSM для Akka FSM будет выглядеть следующим образом:
private val NEW: Behavior[Event] = {
Behaviors.receive {
case (ctx, onUserClicked(payload)) =>
//doSomething()
case _ => Behaviors.unhandled
}
}
теперь, к нашему удивлению, если пользователю удается создать во время НОВОГО состояния событие onUserDoubleClicked(payload), то это ошибка проектирования на нашей стороне.
Проблема в том, что большинство из нас не будет запускать наши приложения на уровне DEBUG в продакшене, если мы столкнемся с необработанным переходом в продакшене, мы никогда не обнаружим это и не исправим в следующей итерации.
Чтобы иметь возможность отслеживать это, то, что мы должны подписаться на Dead Letters, совершенно не переходит к концепциям FSM....
По этой причине я думаю, что даже эта ситуация приемлема для обычной Akka, с концепцией конечного автомата эта ситуация должна быть зарегистрирована, по крайней мере, на уровне WARN, или должна быть предоставлена опция конфигурации для настройки поведения, или вы видите какой-либо другой способ достижения это без огромного беспорядка кода?