我有一个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();
这解决了我的重复处理问题。我仍然不确定它导致问题的原因,但删除该覆盖确实阻止了重复的消息处理。
答案 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();
这解决了我的重复处理问题。我仍然不确定它导致问题的原因,但删除该覆盖确实阻止了重复的消息处理。