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