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