0

我注意到在 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 因为我循环了它。

请指出我的错误,以便我可以解决这个问题。

4

0 回答 0