2017-11-13 5 views
2

나는 사가를 만들었으며 활동을 수행하는 동안 예외를 처리하는 방법을 궁금해하고있었습니다. 이상적으로, 어떤 경우에는 그 사가 인스턴스를 죽이고 싶습니다. 바로 .Catch()입니다.예외가 발생하면 사가를 마무리 함

이 스레드를 우연히 발견했습니다 : Understanding "Finalize" in MassTransit, 내 현재 접근 방식이 약간 다릅니다. .Catch()에서 나는 Faulted 상태로 SagaFaultedEvent 및 전환을 게시 :

.Catch<Exception>(e => e 
    .Publish(context => (ISagaFaultedEvent)new SagaFaultedEvent(context.Instance.Id)) 
    .TransitionTo(Faulted))); 

그런 다음이 이벤트를 처리 이것은 그러나, 작동하는 것 같다 인스턴스

During(Faulted, 
    When(SagaFaulted) 
     .Activity(x => x.OfInstanceType<LogFaultedSagaActivity>()) 
     .Finalize()); 

을 문제를 로깅 및 마무리로,이 질문에 대해 Chris는 언급 한 스레드에 대해 서재응은 Catch()에 직접 마무리해야한다고 말하지만 ExceptionActivityBinder에는 Finalize()이없고 EventActivityBinder에 액세스 할 수 없습니다.

여기에 뭔가가 빠졌습니까? Catch()에서 사가를 직접 마무리 할 수 ​​있습니까?

답변

2

이 내용은 오늘 릴리스 된 3.6.1에서 Automatonymous에 추가되었습니다.

+1

감사합니다 크리스, 그게 빨리 해결되었습니다! – Slowacki

관련 문제