我有一个 NServiceBus 版本 3.3.8 Saga,我正在努力从 NServiceBus 2.6 迁移。升级后,我发现队列中的一条消息被 saga 处理了两次。最奇怪的是 NServiceBus 将其视为两个单独的传输消息,因为我的 IMessageModule 实现也被调用了两次。
它正在接收的消息是绑定到 NServiceBus 2.6 的消息。有没有人见过这个?起初我认为这是一个依赖注入问题,因为我们正在从 Unity 切换到 Autofac,但这似乎并不能解释 MessageModule 被调用两次的问题。
感谢您提供的任何帮助。
更新
事实证明,这个问题是我无意中创建的依赖注入问题。saga 有一些额外的依赖项需要 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();
这解决了我的重复处理问题。我仍然不确定它为什么会导致问题,但删除该覆盖确实阻止了重复的消息处理。