NServiceBus saga 唯一属性
NServiceBus saga Unique attribute
我有一个 saga 数据 class,其中一个 属性 由 Unique 属性标记。但是,这并没有阻止 NServiceBus 在该字段中创建多个具有相同值的 sagas。
这是我的数据class:
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 persistence table(Azure table 存储)中看到的内容:
它应该像这样工作还是我可能遗漏了什么?
Yves 在评论中写了这个,基本上是正确的答案:
Azure 存储无法检查 partitionkey/rowkey 对以外的唯一性,因此该属性将被忽略。如果您需要唯一性,则必须考虑另一种存储技术。 PS:这是底层存储的已知限制:http://github.com/Particular/NServiceBus.Azure/issues/21
我有一个 saga 数据 class,其中一个 属性 由 Unique 属性标记。但是,这并没有阻止 NServiceBus 在该字段中创建多个具有相同值的 sagas。
这是我的数据class:
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 persistence table(Azure table 存储)中看到的内容:
它应该像这样工作还是我可能遗漏了什么?
Yves 在评论中写了这个,基本上是正确的答案:
Azure 存储无法检查 partitionkey/rowkey 对以外的唯一性,因此该属性将被忽略。如果您需要唯一性,则必须考虑另一种存储技术。 PS:这是底层存储的已知限制:http://github.com/Particular/NServiceBus.Azure/issues/21