NServiceBus saga唯一属性

NServiceBus saga唯一属性,nservicebus,saga,nservicebus-sagas,Nservicebus,Saga,Nservicebus Sagas,我有一个saga数据类,其中一个属性由Unique属性标记。然而,这并没有阻止NServiceBus在此字段中创建具有相同值的多个传奇 这是我的数据类: public class ModuleAliveSagaData : ContainSagaData { [Unique] public string ModuleId { get; set; } public string Endpoint { get; set; } public string Module

我有一个saga数据类,其中一个属性由Unique属性标记。然而,这并没有阻止NServiceBus在此字段中创建具有相同值的多个传奇

这是我的数据类:

public class ModuleAliveSagaData : ContainSagaData
{
    [Unique]
    public string ModuleId { get; set; }
    public string Endpoint { get; set; }
    public string Module { get; set; }
    public DateTime LastCheck { get; set; }
    public bool Warning { get; set; }
    public bool Error { get; set; }
}
以下是映射:

public override void ConfigureHowToFindSaga()
{
    ConfigureMapping<ModuleAliveMessage>(m => m.Id).ToSaga(s => s.ModuleId);
}
以下是数据获取其值的方式:

    public void Handle(ModuleStartedMessage message)
    {
        Log.InfoFormat("Module {0} started on {1} at {2}", message.ModuleName, message.Endpoint, message.Timestamp);
        Data.ModuleId = message.Id;
        Data.Endpoint = message.Endpoint;
        Data.Module = message.ModuleName;
        Data.LastCheck = DateTime.Now;
        Data.Warning = false;
        Bus.SendLocal(new SendNotification
        {
            Subject = string.Format("Module {0} is online at {1}", Data.Module, Data.Endpoint)
        });
        RequestTimeout<ModuleCheckTimeout>(TimeSpan.FromMinutes(5));
        Bus.Publish(new ModuleActivated
        {
            Endpoint = message.Endpoint,
            Module = message.ModuleName
        });
    }
下面是我在saga持久性表Azure表存储中看到的内容:

它是这样工作的还是我遗漏了什么


Yves在评论中写道,基本上这是正确的答案:


Azure存储无法检查除partitionkey/rowkey对之外的唯一性,因此该属性被忽略。如果你需要独特性,你就必须考虑另一种存储技术。PS:这是底层存储的已知限制:

您可以在某个地方共享代码或复制代码吗?我在这里创建了一个存储库。它每30秒发送一条信息,触发新的传奇故事。消息唯一属性值对于所有这些消息都是相同的,但是每次都会创建新的saga。Alexey,azure storage无法检查除partitionkey/rowkey对之外的唯一性,因此该属性将被忽略。如果你需要独特性,你就必须考虑另一种存储技术。PS:这是底层存储的一个已知限制:谢谢Yves,当我考虑底层技术时,我开始怀疑这一点。我想尝试RavenDb订阅存储,但我们对应用程序本身使用v3,这与我们使用的NServiceBus 4.7中嵌入的v2客户端冲突。我设法为这个问题创建了一个暂时可以解决的解决方案。如果你为这个问题创建了一个答案,我会标记它,这样如果有人得到这个问题,他们就会知道答案是什么: