首页 > 解决方案 > 中止 MassTransit Saga 的活动链

问题描述

我试图弄清楚如何中止一系列活动,如果一个活动确定有问题,那么 Saga 应该被最终确定。

例如:

Initially(
    When(UpdateRequested)
        .Activity(x => x.OfType<InitialSetup>())
        .Activity(x => x.OfType<StartUpdating>())
        .TransitionTo(Updating)

InitialSetup将根据从数据库加载的一些信息配置 Saga。让它意识到缺少所需的数据,并且应该在StartUpdating运行活动之前完成 Saga。

我怎样才能做到这一点?

标签: masstransitautomatonymous

解决方案


您可以抛出异常,捕获它,然后使用 catch 分支来完成 saga。

Initially(
    When(UpdateRequested)
        .Activity(x => x.OfType<InitialSetup>()) // activity throws
        .Activity(x => x.OfType<StartUpdating>())
        .TransitionTo(Updating)
        .Catch<MissingDataException>(x => x.Finalize())
);

推荐阅读