我使用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)
);
这就是我做错了吗?