0

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

谢谢

4

1 回答 1

0

根据 Andreas Ohlund(见问题评论)的说法,这是 NServiceBus 4.0.2 中的一个错误。根据他的建议 - 升级到 4.0.3 并验证它工作正常。

于 2013-09-03T13:43:56.743 回答