2013-06-27 5 views
2

У меня есть версия NServiceBus 3.3.8 Сага, что я работаю над миграцией из NServiceBus 2.6. После того, как я обновил его, я обнаружил, что одно сообщение в очереди обрабатывается дважды сагой. Самое странное в том, что NServiceBus рассматривает это как два отдельных транспортных сообщения, потому что моя реализация IMessageModule также вызывается дважды.Одно сообщение NServiceBus, обработанное Saga два раза

Сообщение, которое он получает, является сообщением, связанным с NServiceBus 2.6. Кто-нибудь видел это раньше? Сначала я подумал, что это проблема с вложением зависимостей, поскольку мы переходим из Unity в Autofac, но это, похоже, не объясняет проблему с вызовом MessageModule дважды.

Я ценю любую помощь, которую вы можете предоставить.

UPDATE

Оказывается, что этот вопрос был вопрос внедрения зависимостей, что я невольно создал. У саги есть некоторые дополнительные зависимости, которые требуют IBus, а IBus является свойством и устанавливается через инъекцию свойств. Использование модуля Autofac, я попытался упростить конфигурацию, перекрывая AttachToComponentRegistration и инъекционные свойства на все зарегистрированные элементы, как это:

protected override void AttachToComponentRegistration(IComponentRegistry componentRegistry, IComponentRegistration registration) { 
    registration.Activating += (s, e) => e.Context.InjectProperties(e.Instance); 
} 

Это, однако, вызвал вопрос выше. Чтобы исправить это, я удалил это переопределение и вручную настроить инъекции собственности через вызов:

builder.RegisterType<Implementation>().As<Interface>().PropertiesAutowired(); 

Это помогает устранить повторяющиеся проблемы обработки. Я все еще не уверен, почему это вызвало проблему, но удаление этого переопределения предотвратило дублирование обработки сообщений.

+0

У меня была аналогичная проблема с обычным обработчиком, ошибка контейнера, а затем странное дублирующее сообщение. Что здесь происходит? – brumScouse

ответ

0

Оказалось, что проблема была проблемой инъекции зависимостей, которую я непреднамеренно создал. У саги есть некоторые дополнительные зависимости, которые требуют IBus, а IBus является свойством и устанавливается через инъекцию свойств. Использование модуля Autofac, я попытался упростить конфигурацию, перекрывая AttachToComponentRegistration и инъекционные свойства на все зарегистрированные элементы, как это:

protected override void AttachToComponentRegistration(IComponentRegistry componentRegistry, IComponentRegistration registration) { 
     registration.Activating += (s, e) => e.Context.InjectProperties(e.Instance); 
    } 

Это, однако, вызвал вопрос выше. Чтобы исправить это, я удалил это переопределение и вручную настроить инъекции собственности через вызов:

builder.RegisterType<Implementation>().As<Interface>().PropertiesAutowired(); 

Это помогает устранить повторяющиеся проблемы обработки. Я все еще не уверен, почему это вызвало проблему, но удаление этого переопределения предотвратило дублирование обработки сообщений.

+1

Спасибо за обновление, любите его, когда пользователи это делают. –

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