我正在使用持久功能。我已经了解了持久功能的工作原理,因此它具有一个控制流程(业务活动顺序)的业务流程,该业务流程负责活动的顺序。
但是目前我有一个问题,我没有找到正确的答案,也许您可以在这方面帮助我
想象一下,我有一个编排,有5个活动。 其中一项活动是对API的调用,该API将以字节数组的形式获取文档。
如果其中一项活动失败,则业务流程可能会引发异常,而我可以通过代码检测到异常。
我还有一些重试选项,每隔2分钟重试一次活动。 但是...如果这些重试没有成功怎么办?
正如我能够阅读的那样,我可以使用“ ContinueasNew”方法来重新启动业务流程,但是我认为存在问题。 如果我为了在1小时后重新启动业务流程而使用此方法,它将恢复原先的活动吗?
我的意思是,如果完成了第一项活动,并且由于一项活动的失败而重新启动业务流程时,它会像以前一样在第二项活动中恢复吗?
谢谢你的陪伴。
答案 0 :(得分:1)
如果重新启动业务流程,则它没有上一个业务流程的任何状态。 因此,第一个活动将再次运行。
如果您不希望这种情况发生,则需要重试第二个,直到成功。 我不建议将其设置为无限,编排应始终在某个时刻结束。 我只是将重试次数增加到足够高的数量,这样我可以确信至少在99%的情况下该处理将成功。 (您的活动失败的可能性有多大?) 然后,如果仍然失败,则可以将消息发送到队列并使其触发警报。然后,您可以从头开始。 如果某件事失败了很多次而导致重试次数被破坏,则数据本身可能有问题,并且通常可能需要手动干预。
另一种选择是,如果重试失败,则从业务流程内部发送警报,然后等待管理员批准或拒绝重试的外部事件。