Одно сообщение NServiceBus, обработанное Saga два раза

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

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

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

ОБНОВЛЕНИЕ

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

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


person Steve Bering    schedule 27.06.2013    source источник
comment
У меня была аналогичная проблема с обычным обработчиком, ошибкой контейнера, а затем странным повторяющимся сообщением. Что здесь происходит?   -  person brumScouse    schedule 09.03.2017


Ответы (1)


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

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

person Steve Bering    schedule 28.06.2013