单个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(); 

这解决了我的重复处理问题。我仍然不确定它为什么会导致这个问题,但删除该覆盖确实阻止了重复消息处理。

事实证明,这个问题是我无意中创建的依赖项注入问题。传奇有一些额外的依赖项,需要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(); 

这解决了我的重复处理问题。我仍然不确定它为什么会导致这个问题,但删除该覆盖确实阻止了重复消息处理。

最新更新