NServiceBus saga唯一属性
我有一个saga数据类,其中一个属性由Unique属性标记。然而,这并没有阻止NServiceBus在此字段中创建具有相同值的多个传奇 这是我的数据类: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
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客户端冲突。我设法为这个问题创建了一个暂时可以解决的解决方案。如果你为这个问题创建了一个答案,我会标记它,这样如果有人得到这个问题,他们就会知道答案是什么: