У меня есть класс данных саги с одним свойством, отмеченным уникальным атрибутом. Однако это не помешало NServiceBus создать несколько саг с одинаковыми значениями в этой области.NServiceBus saga Уникальный атрибут
Вот мой класс данных:
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
});
}
И вот что я вижу в таблице сохранения саги (хранение в лазурной таблице):
Предполагается ли, что это работает, или, может быть, я что-то упускаю?
Можете ли вы поделиться каким-либо кодом где-нибудь (или с кодом воспроизведения)? –
Я создал репозиторий здесь https://github.com/alexeyzimarev/SagaUniqueTest. Он отправляет сообщение, которое запускает новую сагу каждые 30 секунд. Значение уникального атрибута сообщения одинаково для всех этих сообщений, однако новая сага создается каждый раз. –
Alexey, azure storage не может проверить уникальность, кроме пары разделов/rowkey, так что атрибут игнорируется. Если вам нужна уникальность, вам придется рассмотреть другую технологию хранения. PS: это известное ограничение базового хранилища: https://github.com/Particular/NServiceBus.Azure/issues/21 –