.NET - MassTransit - 所有人的 StateMachine 故障消息

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

我对公共交通库中的 statmachine 有疑问。这是我的代码:

public Event<Requested>? Requested { get; }
public Event<Started>? Started { get; }
public Event<ArchiveFinished>? ArchiveFinished { get; }
public Event? Finished { get; }

public Test() {
            InstanceState(x => x.CurrentState);

            Event(() => Requested, x => x.CorrelateById(context => context.Message.RequestId));

            Event(() => Started, x => x.CorrelateById(context => context.Message.RequestId));

            Event(() => ArchiveFinished, x => x.CorrelateById(context => context.Message.RequestId));

            Initially(
                 When(Requested),
                 When(Started),
                 When(ArchiveFinished)
            );

            CompositeEvent(() => Finished,
                x => x.ReadyEventStatus,
                CompositeEventOptions.IncludeInitial,
                Requested,
                Started,
                ArchiveFinished
            );

            DuringAny(
                When(Finished)
                .Publish(context => new Finished() { RequestId = RequestId })
                .Finalize()
            );

            // Error in any of events?

            SetCompletedWhenFinalized();
}

问题是状态机的工作方式与我完全一样。但有一件事根本不起作用。如果任何事件中有错误,我可以看到该消息有一条错误消息。但我需要,当任何给定事件发生错误时以某种方式调用错误消息。这有可能吗?我尝试了Catch,但没有成功。完成故障不起作用。

编辑:

例如,如果正在处理 Requested 消息并且给定消费者中发生错误,则会创建新的 Requested-Fault 消息。在那里可以处理所有必要的东西。但是,我仍然需要某种方法来对状态机中的这种情况做出反应。创建类似于 FinishedFault 的消息。如果 Requested、Started 或 ArchiveFinished 消息的任何使用者发生错误/异常,我将需要这个。希望这样更清楚。

azure azureservicebus masstransit state-machine saga
1个回答
0
投票

您可以使用以下方式消耗状态机中的故障:

Event<Fault<T>>

其中T是原始消息类型。

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