Здесь поток образец кода:Некоторые из Actor сообщений отсутствуют --AKKA FSM
class FSMActor{
when(Idle) {
case Event(Start, Uninitialized) =>
case Event(InitMap(inMap), t @ EvaluteRuleMap(v, c)) =>
logger.info(s"State = $stateName, Event = Event(_, InitMap(inMap))")
goto(EVALRule) using t.copy(ruleMap = inMap)
}
when(EVALRule) {
case Event(RowMap(m), t @ EvaluteRuleMap(v, c)) =>
logger.debug("input row map m " + m)
**if (<somecondition>) { // If comment this if-else block, I could see rowMaps being received.
logger.debug(s"Moving to State Trigger x=$x")
goto(TriggerRule) using t.copy(ruleMap = x.get)
} else {
logger.debug(s"staying in EVALRule, x = $x")
stay
}**
}
when(TriggerRule) {
case Event(_, _) => ....
}
}
}
Когда управление в в «EVALRule» состоянии, он будет продолжать получать потоки карт (RowMap) и на основании некоторые вычисления, он перемещается для запуска правила.
К сожалению, для некоторых странных причин некоторые входящие RowMaps не принимаются в случае «case Event (RowMap (m), t @ EvaluteRuleMap (v, c)) =>» и Если я прокомментирую код bock (выделенные жирным шрифтом в приведенном выше коде), тогда я мог видеть все входящие строки. Может ли кто-нибудь сообщить мне, почему так? Я пытался найти причину, но не смог ее получить.
Цените свою помощь, спасибо.
К сожалению, это опечатка, ее просто событие не СОБЫТИЕ. исправил его. – Avis
Можете ли вы поместить блок whenUnhandled и посмотреть, есть ли там какие-нибудь сообщения? –
Да, у меня на самом деле было это, когда был обработан {} блок, но я до сих пор не вижу никаких сообщений, идущих туда. У меня также есть блок OnTransition {}, где я мог видеть переход состояния, но что-то странное поведение при переключении между состояниями. Есть предположения? – Avis