如何触发Automatonymous状态机中使用的活动的补偿流程的执行?

问题描述 投票:0回答:1

我的活动在执行期间不时抛出异常,所以我实现了Activity<TInstance>的Faulted方法来处理它,放弃了Execute方法中所做的更改。我认为在Automatonymous下面有一些布线,这使得当Execute方法抛出异常然后为已经执行的活动调用Faulted方法时,Faulted方法执行。事实证明,没有这样的事情,因为我的Faulted方法永远不会被执行。

我应该在try / catch块中调用自己吗?我可以根据BehaviorExceptionContextProxy生成BehaviorContext并抛出异常。我可以通过的唯一下一个Behavior将是插入ActivityExecute方法的那个,但逻辑上这意味着我正在补偿错误的方向,因为下一个Behavior实际上是在这个成功之后被执行,所以我也会补偿许多。

我也尝试在状态机中使用Catch,它确实处理异常,但是,当我只有ExceptionActivityBinder存在时,我找不到任何方法来开始执行失败的活动的补偿流程。

是否有任何好方法可以触发活动的补偿流程?

masstransit saga automatonymous
1个回答
1
投票

状态机中的活动(使用Automatonymous)与Courier中的活动有很大不同。不幸的是,它们都有相同的名称,这可能会造成混乱。

当一个活动抛出异常时,将调用该行为中下一个活动的Faulted方法。如果该方法是常规活动方法(例如.Then,.Publish等),则跳过它,因为这些活动的Faulted方法只调用行为中的下一个活动。

然而,Catch活动可用于捕获异常并执行救援行为(这是一系列活动)。

无论哪种方式,都不会调用在Execute方法中抛出异常的Faulted方法。所以是的,您应该使用try / catch,但允许异常从Execute方法流回来,以便行为正确处理它。

© www.soinside.com 2019 - 2024. All rights reserved.