2013-06-27 40 views
2

我有一个NServiceBus版本3.3.8佐贺,我正在从NServiceBus 2.6迁移。在我升级它之后,我发现队列中的单个消息正在被传奇两次处理。最令人感到奇怪的是NServiceBus将它视为两个独立的传输消息,因为我的IMessageModule实现也被调用了两次。单一NServiceBus消息由佐贺处理两次

它正在接收的消息是绑定到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

感谢您的更新,当用户这样做的时候喜欢它。 –

相关问题