由Saga处理的单个NServiceBus消息两次

时间:2013-06-27 20:12:36

标签: nservicebus messaging saga

我有一个NServiceBus版本3.3.8 Saga,我正在从NServiceBus 2.6迁移。升级之后,我发现队列中的一条消息被saga处理了两次。最奇怪的是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(); 

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

1 个答案:

答案 0 :(得分: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(); 

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