Я создал сагу и задавался вопросом, как обрабатывать исключения во время выполнения действий. В идеале я хотел бы в некоторых случаях убить этот экземпляр саги сразу в .Catch()
.
Я наткнулся на эту ветку: Понимание Finalize в MassTransit, мой текущий подход немного отличается. В .Catch()
я публикую SagaFaultedEvent
и переход в состояние Faulted
:
.Catch<Exception>(e => e
.Publish(context => (ISagaFaultedEvent)new SagaFaultedEvent(context.Instance.Id))
.TransitionTo(Faulted)));
Затем обработайте это событие, зарегистрировав проблему и завершив экземпляр.
During(Faulted,
When(SagaFaulted)
.Activity(x => x.OfInstanceType<LogFaultedSagaActivity>())
.Finalize());
Кажется, это работает, однако в ответе на упомянутую ветку Крис говорит, что сага должна быть завершена прямо там, в Catch()
, однако на ExceptionActivityBinder
нет Finalize()
, и у меня нет доступа к EventActivityBinder
там.
Я что-то здесь упускаю (возможно)? Можно ли доработать сагу прямо в Catch()
?