我在masstransit库中有一个关于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它不起作用。完成错误不起作用。
编辑:
例如,如果正在处理一个请求的消息,并且在一个给定的消费者中发生了错误,则将创建一个新的已删除的错误消息。在那里可以处理所有必要的东西。但是,我仍然需要一些方法来在状态机中对这种情况做出React。创建一个类似于已删除的错误的消息。如果在请求的任何消费者中发生错误/异常,我将需要这个消息,Started或ArchiveFinished消息。希望这样更清楚。
编辑2
public Event<Requested>? Requested { get; }
public Event<Fault<Requested>>? RequestedFault { get; }
public Event<Started>? Started { get; }
public Event<Fault<Started>>? StartedFault { get; }
public Event<ArchiveFinished>? ArchiveFinished { get; }
public Event<Fault<ArchiveFinished>>? ArchiveFinishedFault { get; }
public Event? Finished { get; }
public Test() {
InstanceState(x => x.CurrentState);
Event(() => Requested, x => x.CorrelateById(context => context.Message.RequestId));
Event(() => RequestedFault, x => x.CorrelateById(context => context.Message.Message.RequestId));
Event(() => Started, x => x.CorrelateById(context => context.Message.RequestId));
Event(() => StartedFault, x => x.CorrelateById(context => context.Message.Message.RequestId));
Event(() => ArchiveFinished, x => x.CorrelateById(context => context.Message.RequestId));
Event(() => ArchiveFinishedFault, x => x.CorrelateById(context => context.Message.Message.RequestId));
Initially(
When(Requested),
When(RequestedFault)
.Publish(context => new FinishedFault...),
When(Started),
When(StartedFault),
.Publish(context => new FinishedFault...),
When(ArchiveFinished),
When(ArchiveFinishedFault),
.Publish(context => new FinishedFault...)
);
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();
}
型
1条答案
按热度按时间kq4fsx7k1#
您可以使用以下命令在状态机中使用故障:
字符串
其中T是原始消息类型。