我注意到在 statemachinefactory 中使用超时和 redis 持久性存在问题。
以上是我的状态机 uml 图。我在我的代码中添加了一个 stateListener 并且每次它都持续存在。
StateMachine stateMachine = factory.getStateMachine();
stateMachine.addStateListener(new CompositeStateMachineListener<String, String>() {
@Override
public void stateContext(StateContext<String, String> arg0) {
String user = (String) arg0.getExtendedState().getVariables().get("imei");
if (user == null) {
return;
}
log.info(arg0.getStage().toString() + "**********" + stateMachine.getState());
try {
redisStateMachinePersister.persist(arg0.getStateMachine(), "testprefixSw:" + user);
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
});
注意:ExitPointGQ 指向父机器的称为 WAITFORCOMMAND 的初始状态。
现在假设我需要通过发出信号 WAIT 来等待,机器会返回到 WaitForGenQueryRes,这是正确的。但是到现在,第一个计时器已经启动,并且在 60 秒后,计时器触发并通过退出点退出,并坚持认为状态现在处于 WAITFORCOMMAND 而它必须处于 WaitForGenQueryRes 因为我循环了它。
请指出我的错误,以便我可以解决这个问题。