2
我们使用MassTransit/RabbitMQ和Unity。我注意到每个消费者都收到一条消息两次。我看过other posts其他人也在描述这个问题。我很清楚,具体是什么原因。但是,所有手指似乎都指向MT的SubScriptionBusConfigurator.LoadFrom(IUnityContainer容器)方法。MassTransit&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));
那么什么是正确的/首选的方式来注册我的消费者,使消息不会发送给每个消费者两次?
谢谢!
LOL。谢啦! – Nick
与AutoFact和AsSelf()一样,AsImplementedInterfaces()系统获得了两倍的消息。 – Miguel