Rabbitmq 大众运输公司;Unity-如何避免向消费者发送重复消息?
我们正在使用MassTransit/RabbitMQ和Unity。我注意到每个消费者都会收到一条消息两次。我也看过其他人在哪里描述这个问题。我很清楚具体原因是什么。然而,所有的手指似乎都指向MT的SubScriptionBusConfigurator.LoadFrom(IUnityContainer容器)方法 我正在使用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&
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));