如果nservicebus saga已经启动,如何记录

时间:2013-08-05 08:31:47

标签: c# .net nservicebus

我有一个传奇:

public class MySaga : Saga<MySagaEntity>,
  IAmStartedByMessages<Message1>,
  IAmStartedByMessages<Message2> {

}

一般来说,我需要从日志中轻松查看哪些消息开始哪些传奇。

我需要记录的内容如下:

  

收到消息Message1 with ...开始一个新的传奇      收到消息Message2 with ... for exsisting saga with Id = ...

作为替代方案,我有以下方法: 1.检查日志文件是否未启动该传奇 2.检查saga的correlationid是否为空(因此它将在启动传奇的处理程序中填充)

 if (Data.CorrelationId == default_value)
      _log.DebugFormat("message starts saga CorrelationId={0}", message.CorrelationId)

有没有人知道更好的方法呢?

1 个答案:

答案 0 :(得分:1)

如果已经创建了一个saga或者加载了一个现有实例,NServiceBus中没有一种方法可以获得通知。 (我已经开辟了一个github issue供进一步讨论)

那说如果传奇是由给定的消息创建的,那么事实就是你可能最好在你的传奇数据上设置一个布尔标志来明确地记录它。

if(Data.SagaWasStartedByAOnlineCustomer)
    Bus.Send(new VerifySomethingForOnlineCustomersCommand);