Ошибки обработки MassTransit в Saga

Я пытаюсь обработать конкретный Fault внутри экземпляра Saga, как описано в https://masstransit-project.com/MassTransit/usage/exceptions.html#faults. В моемStateMachine классе у меня есть:

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<CustomCommand>, код внутри обработчика не был выполнен, и сообщение Fault<CustomCommand> отправляется в очередь ..._skipped.

Что я делаю неправильно??


person Mikel    schedule 31.12.2019    source источник


Ответы (1)


CustomCommands обрабатывается в состоянии Начальное и вызывает исключение? Это предотвратит сохранение экземпляра саги и, таким образом, после публикации ошибки приведет к игнорированию ошибки, поскольку DuringAny не включает состояния Initial или Final. Если вы хотите обработать ошибку в состоянии Начальное, вам нужно добавить его явно.

Initially(WhenError());
DuringAny(WhenError());
person Chris Patterson    schedule 31.12.2019
comment
Спасибо за ответ! Это не было моей проблемой, я исправляю ошибки в пользовательском состоянии саги. Но очень приятно знать, что DuringAny не встречается Initially. Моя проблема заключалась в неправильной конфигурации Saga - один из потребителей ошибочно указал на очередь Saga и обрабатывал сообщения неизвестного ему типа. - person Mikel; 09.01.2020