2015-02-13 7 views
0

У меня есть класс данных саги с одним свойством, отмеченным уникальным атрибутом. Однако это не помешало 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 
     }); 
    } 

И вот что я вижу в таблице сохранения саги (хранение в лазурной таблице):

Предполагается ли, что это работает, или, может быть, я что-то упускаю?

enter image description here

+0

Можете ли вы поделиться каким-либо кодом где-нибудь (или с кодом воспроизведения)? –

+0

Я создал репозиторий здесь https://github.com/alexeyzimarev/SagaUniqueTest. Он отправляет сообщение, которое запускает новую сагу каждые 30 секунд. Значение уникального атрибута сообщения одинаково для всех этих сообщений, однако новая сага создается каждый раз. –

+0

Alexey, azure storage не может проверить уникальность, кроме пары разделов/rowkey, так что атрибут игнорируется. Если вам нужна уникальность, вам придется рассмотреть другую технологию хранения. PS: это известное ограничение базового хранилища: https://github.com/Particular/NServiceBus.Azure/issues/21 –

ответ

0

Ив написал в комментариях, в основном это правильный ответ:

Azure хранения не может проверить uniquess кроме пары PartitionKey/RowKey, поэтому этот атрибут игнорируется. Если вам нужна уникальность, вам придется рассмотреть другую технологию хранения. PS: это известное ограничение базового хранилища: http://github.com/Particular/NServiceBus.Azure/issues/21

 Смежные вопросы

  • Нет связанных вопросов^_^