我计划使用Sagas处理一些业务流程。业务流程的结束可能标志着同一流程的另一个实例的开始,我计划通过Saga的新实例来处理。
我有以下Saga示例代码
class ProcessSaga : Saga<SProcess>,
IAmStartedByMessages<StartProcess>,
IHandleTimeouts<TimeToSpawn>
{
public override void ConfigureHowToFindSaga()
{
ConfigureMapping<StartProcess>(e => e.ProcessId, message => message.ProcessId);
}
public void Handle(StartProcess message)
{
Data.ProcessId = message.Process.ProcessId;
Data.Process = message.Process;
Data.StatusTryCount = 0;
RequestTimeout<TimeToSpawn>(DateTime.Now.AddSeconds(5));
}
public void Timeout(TimeToSpawn state)
{
var process = Data.Process;
var startProcess = new StartProcess()
{
Process = new Process()
{
ProcessId = process.ProcessId + 100,
ProcessName = "Long Process"
}
};
Bus.Send(startProcess);
}
}
class SProcess : IContainSagaData
{
[Unique]
public int ProcessId { get; set; }
public int StatusTryCount { get; set; }
public Process Process { get; set; }
public Guid Id { get; set; }
public string Originator { get; set; }
public string OriginalMessageId { get; set; }
}
从Timeout我需要能够通过发送StartProcess消息来创建一个新的Saga实例,该消息应该启动新的Saga,但是这条消息被路由到发送它的同一个Saga。我做错了什么,如何实现上述要求。
谢谢
答案 0 :(得分:0)
根据Andreas Ohlund的说法(请参阅提问),这是NServiceBus 4.0.2中的一个错误。根据他的建议 - 升级到4.0.3并确认它正常工作。