Как предотвратить запуск саги NServiceBus несколько раз? - PullRequest
4 голосов
/ 22 июня 2011

Я хочу создать сагу, которая запускается сообщением «Event1», но которая будет игнорировать получение «дубликатов» стартовых сообщений с одинаковым идентификатором приложения (что может быть вызвано тем, что два или более пользователей нажали кнопку пользовательского интерфейса в течение короткого периода временивремени).Документация предполагает, что этот подход будет работать:

  • Saga объявляет IAmStartedByMessages<Event1>
  • Saga настраивается с ConfigureMapping<Event1>(s => s.SomeID, m => m.SomeID);
  • Наборами дескрипторов (Event1 evt)логический флаг, когда он обрабатывает первое сообщение и выпадает из обработчика, если флаг уже установлен.

Будет ли это работать?Будет ли у меня состояние гонки, если подписчики многопоточные?Если да, то как мне добиться желаемого поведения?

Спасибо!

1 Ответ

5 голосов
/ 22 июня 2011

Состояние гонки возникает, когда два сообщения Event1 обрабатываются одновременно.Чтобы предотвратить создание двух экземпляров саги, нужно установить уникальное ограничение для столбца SomeID.

...