由Saga处理两次的单个NServiceBus消息
我有一个NServiceBus版本3.3.8的传奇,我正在从NServiceBus 2.6迁移。升级后,我发现队列中的一条消息被saga处理了两次。最奇怪的是,NServiceBus将其视为两条单独的传输消息,因为我的IMessageModule实现也被调用了两次 它接收的消息是绑定到NServiceBus 2.6的消息。以前有人见过这个吗?我起初认为这是一个依赖注入问题,因为我们正在从Unity切换到Autofac,但这似乎不能解释MessageModule被调用两次的问题 我感谢你能提供的任何帮助 更新由Saga处理两次的单个NServiceBus消息,nservicebus,messaging,saga,Nservicebus,Messaging,Saga,我有一个NServiceBus版本3.3.8的传奇,我正在从NServiceBus 2.6迁移。升级后,我发现队列中的一条消息被saga处理了两次。最奇怪的是,NServiceBus将其视为两条单独的传输消息,因为我的IMessageModule实现也被调用了两次 它接收的消息是绑定到NServiceBus 2.6的消息。以前有人见过这个吗?我起初认为这是一个依赖注入问题,因为我们正在从Unity切换到Autofac,但这似乎不能解释MessageModule被调用两次的问题 我感谢你能提供的任
事实证明,这个问题是我无意中创建的依赖项注入问题。saga还有一些需要IBU的附加依赖项,IBU是一个属性,通过属性注入进行设置。使用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();
builder.RegisterType<Implementation>().As<Interface>().PropertiesAutowired();
builder.RegisterType().As().PropertiesAutowired();
这解决了我的重复处理问题。我仍然不确定它为什么会导致问题,但删除该覆盖确实阻止了重复的消息处理。事实证明,该问题是我无意中创建的依赖项注入问题。saga还有一些需要IBU的附加依赖项,IBU是一个属性,通过属性注入进行设置。使用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();
builder.RegisterType<Implementation>().As<Interface>().PropertiesAutowired();
builder.RegisterType().As().PropertiesAutowired();
这解决了我的重复处理问题。我仍然不确定它为什么会导致问题,但删除该覆盖确实阻止了重复消息的处理。我遇到了一个普通处理程序的类似问题,一个容器错误,然后是一个奇怪的重复消息。这到底是怎么回事?