Rabbitmq 大众运输公司;Unity-如何避免向消费者发送重复消息?

Rabbitmq 大众运输公司;Unity-如何避免向消费者发送重复消息?,rabbitmq,unity-container,message-queue,servicebus,masstransit,Rabbitmq,Unity Container,Message Queue,Servicebus,Masstransit,我们正在使用MassTransit/RabbitMQ和Unity。我注意到每个消费者都会收到一条消息两次。我也看过其他人在哪里描述这个问题。我很清楚具体原因是什么。然而,所有的手指似乎都指向MT的SubScriptionBusConfigurator.LoadFrom(IUnityContainer容器)方法 我正在使用Unity容器注册几个消费者,如下所示: container.RegisterType<ConsumerA>(); container.RegisterType&

我们正在使用MassTransit/RabbitMQ和Unity。我注意到每个消费者都会收到一条消息两次。我也看过其他人在哪里描述这个问题。我很清楚具体原因是什么。然而,所有的手指似乎都指向MT的SubScriptionBusConfigurator.LoadFrom(IUnityContainer容器)方法

我正在使用Unity容器注册几个消费者,如下所示:

 container.RegisterType<ConsumerA>();
 container.RegisterType<ConsumerB>();
 container.RegisterType<ConsumerC>();   
那么,注册我的消费者的正确/首选方法是什么,这样就不会向每个消费者发送两次消息


谢谢

特定于容器的
LoadFrom
做出了许多假设。其中一些可能不适合您


我建议将调用更改为
sbc.Subscribe(s=>container.Resolve())
,等等。
LoadFrom
是一种方便的方法,如果出于任何原因不再方便,请跳过它

AutoFact和AsSelf()也发生了同样的情况。作为implementedInterfaces(),系统将收到两倍的消息。
public class ConsumerA : Consumes<SomeMessage>.All
{
  public void Consume(SomeMessage message)
  {
     ...
  }
}
container.RegisterType<IServiceBus>(new ContainerControlledLifetimeManager(), new InjectionFactory(x => ServiceBusFactory.New(sbc =>
            {
                sbc.ReceiveFrom("rabbitmq://localhost/service_bus");
                sbc.UseRabbitMq();
                sbc.UseNLog();
                sbc.Subscribe(s => s.LoadFrom(container));
                sbc.Subscribe(s => s.Handler<IFault>((context, message) =>
                  _logger.Error(string.Format("ServiceBus Fault: {0}", message.FaultType))));
            })));
sbc.Subscribe(s => s.LoadFrom(container));