【问题标题】:MassTransit handling Faults in SagaMassTransit 处理 Saga 中的故障
【发布时间】:2019-12-31 09:02:45
【问题描述】:

我正在尝试处理 Saga 实例中的特定 Fault,如 https://masstransit-project.com/MassTransit/usage/exceptions.html#faults 中所述。 在 myStateMachine 课程中,我有:

Event(
    () => OnError,
    x => x
        .CorrelateById(context => context.Message.Message.CorrelationId))

DuringAny(WhenError());

...

public Event<CustomCommand> CustomCommandReceived { get; protected set; }

public Event<Fault<CustomCommand>> OnError { get; protected set; }

...

private EventActivityBinder<RequestSaga, Fault<CustomCommand>> WhenError()
{
    return When(OnError)
        .Then(context =>
        {
            context.Instance.Status = RequestProcessingStatus.Error;
        });
}

但是当Fault&lt;CustomCommand&gt; 发生时,处理程序内的代码没有执行,Fault&lt;CustomCommand&gt; 消息进入..._skipped 队列。

我做错了什么??

【问题讨论】:

    标签: c# asp.net-core masstransit saga


    【解决方案1】:

    CustomCommands 是否在 Initial 状态下处理,并抛出异常?这将阻止保存 saga 实例,因此在发布故障后,将导致故障被忽略,因为 DuringAny 不包括 Initial 或 Final状态。如果要处理Initial状态的故障,需要显式添加。

    Initially(WhenError());
    DuringAny(WhenError());
    

    【讨论】:

    • 感谢您的回答!那不是我的问题,我在自定义传奇状态下处理错误。但很高兴知道DuringAny 不等于Initially。我的问题在于 Saga 配置错误 - 一位消费者被错误地指向 Saga 队列并处理他不知道的类型的消息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-23
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 2014-07-19
    相关资源
    最近更新 更多