【发布时间】:2014-02-13 02:17:36
【问题描述】:
我们正在使用 MassTransit/RabbitMQ 和 Unity。我注意到每个消费者两次收到一条消息。我查看了other posts,其他人也在描述这个问题。我很清楚是什么,具体是什么原因。然而,所有的手指似乎都指向了 MT 的 SubScriptionBusConfigurator.LoadFrom(IUnityContainer container) 方法。
我正在向我的 Unity 容器注册多个消费者,如下所示:
container.RegisterType<ConsumerA>();
container.RegisterType<ConsumerB>();
container.RegisterType<ConsumerC>();
我的消费者都在收听相同的消息:
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));
那么注册我的消费者的正确/首选方法是什么,以便消息不会发送给每个消费者两次??
谢谢!!!
【问题讨论】:
标签: rabbitmq unity-container message-queue servicebus masstransit