标记为IAmStartedBy的消息路由到现有的Saga实例

时间:2013-08-30 21:17:22

标签: .net message nservicebus nservicebus4

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

谢谢

1 个答案:

答案 0 :(得分:0)

根据Andreas Ohlund的说法(请参阅提问),这是NServiceBus 4.0.2中的一个错误。根据他的建议 - 升级到4.0.3并确认它正常工作。