1

到目前为止,我在状态机方面取得了不错的进展。当我想使用 fork 时,我最近的问题出现了(我正在使用 UML)。叉子没有按预期工作,我认为这是因为持久性。我将我的机器保存在redis中。参考下图。

在此处输入图像描述

这是我的顶级机器,其中 Manage-commands 是子机器参考,而顶级区域就是这样。

现在说我在 redis 中保持了一些状态,来自下面的区域,然后一个 ONLINE 事件来了,然后机器不接受该事件,显然是因为我已经要求机器使用给定的键从 redis 恢复状态。bur 我希望两个区域都被持久化,以便根据事件选择其中一个。有什么办法可以做到这一点?

以下是我坚持恢复的方式

private void feedMachine(StateMachine<String, String> stateMachine, String user, GenericMessage<String> event)
        throws Exception {
    stateMachine.sendEvent(event);
    System.out.println("persist machine --- > state :" + stateMachine.getState().toString());
    redisStateMachinePersister.persist(stateMachine, "testprefixSw:" + user);
}

private StateMachine<String, String> resetStateMachineFromStore(StateMachine<String, String> stateMachine,
        String user) throws Exception {

    StateMachine<String, String> machine = redisStateMachinePersister.restore(stateMachine, "testprefixSw:" + user);
    System.out.println("restore machine --- > state :" + machine.getState().toString());
    return machine;
}
4

1 回答 1

0

这有点奇怪,因为我发现了一些其他的持久性问题,我在1.2.x. 可能与您的问题无关,但我希望您会看到类似的错误。无论如何,您可以检查RedisPersistTests.java并查看您正在做的事情是否有所不同。我还没有尝试子机引用,但从持久性的角度来看,我不应该有任何区别。

于 2017-03-21T11:27:48.500 回答