Spring 如何重试失败的操作?

Spring 如何重试失败的操作?,spring,spring-statemachine,Spring,Spring Statemachine,我查阅了Spring Statemachine文档,但没有找到某些场景的明确答案。如果有人能澄清我的问题,我将不胜感激 场景1:如何重试与操作失败相关的错误?假设我有以下状态S1、S2和S3,当我们从S1过渡到S2时,我想执行动作A2。如果操作A2失败,我想每隔一段时间重试一次。使用Spring StateMachine可以吗 以AWS状态机阶跃函数为例。步骤功能状态中的所有工作都使用Task完成。并且可以将任务配置为重试 transitions .withExterna

我查阅了Spring Statemachine文档,但没有找到某些场景的明确答案。如果有人能澄清我的问题,我将不胜感激

场景1:如何重试与操作失败相关的错误?假设我有以下状态S1、S2和S3,当我们从S1过渡到S2时,我想执行动作A2。如果操作A2失败,我想每隔一段时间重试一次。使用Spring StateMachine可以吗

以AWS状态机阶跃函数为例。步骤功能状态中的所有工作都使用Task完成。并且可以将任务配置为重试

transitions
            .withExternal()
                .source(States.S1)
                .target(States.S2)
                .event(Events.E1)
                .action(action());
场景2:假设Statemachine具有状态S1、S2和S3。当前状态为S2。如果服务器在启动时宕机,状态机的执行会从它停止的地方重新开始吗?还是我们必须重新开始

场景3:当一个保护返回false(可能是由于错误条件)并阻止转换时,接下来会发生什么

如何重试失败的操作

Spring状态机中有两种类型的操作—转换操作和状态操作。在场景1中,您讨论的是过渡操作

指定转换操作时,如果操作失败,还可以指定错误处理程序。这在spring状态机中有明确的记录

errorAction()
方法中,可以实现逻辑。 可能的选择包括:

  • 转换到较早的状态并走相同的路径
  • 转换到特定状态(例如重试状态),在该状态下,您可以使用重试逻辑(例如,重试操作N次的任务/执行器,以及转换到其他状态(例如,操作成功=>进入正常流程;重试N次后操作失败=>转换到失败终端状态)
还有,它演示了恢复/重试逻辑()

如何重试失败的操作

Spring状态机中有两种类型的操作—转换操作和状态操作。在场景1中,您讨论的是转换操作

指定转换操作时,如果操作失败,还可以指定错误处理程序。这在spring状态机中有明确的说明

errorAction()
方法中,可以实现逻辑。 可能的选择包括:

  • 转换到较早的状态并走相同的路径
  • 转换到特定状态(例如重试状态),在该状态下,您可以使用重试逻辑(例如,重试操作N次的任务/执行器,以及转换到其他状态(例如,操作成功=>进入正常流程;重试N次后操作失败=>转换到失败终端状态)

还有,它演示了恢复/重试逻辑().

场景2和场景3与重试逻辑无关。它们是完全独立的问题。场景2和场景3与重试逻辑无关。它们是完全独立的问题。感谢您的回答。我尝试了您上面提到的两个选项进行重试。如果可能,请您也为公司提供场景2和场景3的答案以上问题答案的完整性。之后我将接受答案。谢谢。@MuneerY场景2和3与您的主要问题无关-我看不出它们如何带来“完整性”事实上正好相反,他们会带来困惑。也许会考虑问一些单独的问题。谢谢你的回答。我试过上面提到的两个选项。如果可能的话,你也可以提供对场景2和场景3的回答,只是为了回答上述问题的完整性。之后我会接受T。他回答。谢谢。MuneRice场景2和3与你的主要问题无关。我不知道它们如何带来“完整性”。实际上相反的是,它们会带来混乱。也许考虑单独问这些问题。
.withExternal()
    .source(States.S1)
    .target(States.S2)
    .event(Events.E1)
    .action(action(), errorAction());