我计划通过使用 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。我做错了什么以及如何实现上述要求。
谢谢