MassTransit传奇状态接收意外事件

时间:2016-11-29 22:38:56

标签: masstransit saga automatonymous

我使用MassTransit.Automatonymous(版本3.3.5)来管理一个传奇,我似乎在状态转换后收到意外事件。

这是我的状态设置:

        Initially(
            When(Requested)
                .ThenAsync(InitialiseSaga)
                .TransitionTo(Initialising)
            );

        During(Initialising,
            When(InitialisationCompleted)
                .ThenAsync(FetchTraceSetMetaData)
                .TransitionTo(FetchingTraceSetMetaData)
            );

        During(FetchingTraceSetMetaData,
            When(TraceSetMetaDataRetrieved)
                .ThenAsync(ExtractTiffFiles)
                .TransitionTo(ExtractingTiffFiles)
            );

        During(ExtractingTiffFiles,
            When(TiffFilesExtracted)
                .ThenAsync(DispatchTiffParseMessages)
                .TransitionTo(DispatchingTiffParseMessages)
            );

有时收到的错误是:

  

在处理期间不处理TraceSetMetaDataRetrieved事件   ExtractingTiffFiles状态为ImportTraceSetDataStateMachine状态   机

我对 在错误点如何工作的理解如下:

FetchingTraceSetMetaData 状态期间,我会在某个时刻收到 TraceSetMetaDataRetrieved 事件。发生这种情况时,运行 ExtractTiffFiles 方法,然后转换到 ExtractingTiffFiles 状态。

一旦进入 ExtractingTiffFiles 状态,我就不会期待 TraceSetMetaDataRetrieved 事件,因为它是什么让我们进入了 ExtractingTiffFiles 州。

两个FetchTraceSetMetaData和ExtractTiffFiles方法如下(为简洁而截断):

    public async Task FetchTraceSetMetaData(BehaviorContext<ImportTraceSetDataSagaState, InitialisationCompleteEvent> context)
    {
        var traceSetId = context.Instance.TraceSetId;
        _log.Information($"Getting pixel indicies for trace set with id {traceSetId}");

        // Snip...!

        await context.Publish(new TraceSetMetaDataRetrievedEvent { CorrelationId = context.Data.CorrelationId });
    }


    public async Task ExtractTiffFiles(BehaviorContext<ImportTraceSetDataSagaState, TraceSetMetaDataRetrievedEvent> context)
    {
        _log.Information($"Extracting tiffs for {context.Instance.TiffZipFileKey} and trace set with id {context.Instance.TraceSetId}");

        // Snip...!

        // Dispatch an event to put the saga in the next state where we dispatch the parse messages
        await context.Publish(new TiffFilesExtractedEvent { CorrelationId = context.Data.CorrelationId });
    }

发布思考

我刚刚想到我可能在我的ThenAsync语句之前有我的TransitionTo语句。 e.g。

During(FetchingTraceSetMetaData,
        When(TraceSetMetaDataRetrieved)
            .TransitionTo(ExtractingTiffFiles)
            .ThenAsync(ExtractTiffFiles)
        );

这就是我做错了吗?

0 个答案:

没有答案