masstransit - 如何触发自动状态机中使用的活动的补偿流程的执行?
问题描述
我的活动在执行过程中不时抛出异常,因此我实现了 Faulted 方法Activity<TInstance>
来处理它,丢弃了在方法中所做的更改Execute
。我认为在 Automatonymous 中存在一些布线,使得在Execute
方法抛出异常时执行 Faulted 方法,然后为已经执行的活动调用 Faulted 方法。事实证明,没有这样的事情,因为我的错误方法永远不会执行。
我应该在 try/catch 块中调用那些自己吗?我可以产生BehaviorExceptionContextProxy
基于BehaviorContext
和抛出的异常。我唯一Behavior
可以通过的下一个是插入到 that方法中Activity
的Execute
那个,但从逻辑上讲,这意味着我在错误的方向上进行补偿,因为下一个Behavior
实际上是在这个成功后执行的,所以我会补偿太多。
我还尝试使用Catch
状态机中的 ,它确实处理了异常,但是,当我只有现在时,我找不到任何方法来开始为失败的活动执行补偿流ExceptionActivityBinder
。
有什么好的方法可以触发活动的补偿流程吗?
解决方案
状态机中的活动(使用 Automatonymous)与 Courier 中的活动有很大不同。不幸的是,它们都具有相同的名称,这可能会造成混淆。
当一个活动抛出异常时,Faulted
会调用该行为中下一个活动的方法。如果该方法是常规活动方法(例如 .Then、.Publish 等),则会跳过它,因为Faulted
这些活动的方法只是调用行为中的下一个活动。
Catch
但是,活动可用于捕获异常并执行救援行为(这是一系列活动)。
无论哪种方式,都不会调用在 Execute 方法中引发异常的活动的 Faulted 方法。所以是的,您应该使用 try/catch,但允许异常从 Execute 方法流出,以便行为正确处理它。
推荐阅读
- php - php 和 django 与 apache 站点之间的冲突 - 可用
- json - 与 Lambda 代理集成的 AWS API Gateway 失败
- azure - 应用程序网关将 URL 路由到自定义端口
- python - 如何在 Pandas 数据框中将异常时间戳转换为日期时间
- python - Pandas Dataframe:过滤使用列定义的条件
- node.js - sequelize include,连接两个关联表
- python - 无法在 REFRESH_TOKEN_AUTH 验证客户端的秘密哈希
- excel - Excel公式将一个表中的单元格与另一表中的单元格匹配并返回总和值
- javascript - 如果 Web 应用的 CacheStorage 缓存内容过多,应用会崩溃吗?
- elasticsearch - 别名上的 ElasticSearch 在 5 天后无法正常工作