我浏览了Spring Statemachine文档,但在某些情况下没有找到明确的答案。如果有人可以澄清我的问题,我将不胜感激。
方案1:如何重试与操作失败有关的错误?可以说我有以下状态S1,S2和S3,当我们从S1过渡到S2时,我想执行操作A2。如果操作A2失败,我想每隔一段时间重试一次。使用Spring StateMachine有可能吗?
例如,考虑AWS状态机步骤功能。步骤功能状态中的所有工作都使用Task完成。并且可以将Task配置为重试。
transitions
.withExternal()
.source(States.S1)
.target(States.S2)
.event(Events.E1)
.action(action());
场景2:假设状态机具有状态S1,S2和S3。当前状态为S2。如果服务器在启动时出现故障,状态机的执行将从停止的地方继续执行,还是我们必须重新做一遍?
方案3:当后卫返回false(可能是由于错误情况所致)并阻止过渡时,接下来会发生什么?
答案 0 :(得分:0)
如何重试失败的操作?
Spring State Machine中有两种类型的动作-过渡动作和状态动作。在场景1 中,您正在谈论过渡动作。
指定过渡动作时,如果动作失败,也可以指定错误处理程序。弹簧状态机documentation中清楚地记录了这一点。
.withExternal()
.source(States.S1)
.target(States.S2)
.event(Events.E1)
.action(action(), errorAction());
在您的errorAction()
方法中,您可以实现您的逻辑。
可能的选项是:
还有official Tasks example,它演示了恢复/重试逻辑(source code)。