我们正在使用 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));
那么注册消费者的正确/首选方法是什么,这样消息就不会发送给每个消费者两次?
谢谢!!!
最佳答案
容器特定LoadFrom
做出很多假设。其中一些可能不适合您。
我建议将调用更改为 sbc.Subscribe(s => container.Resolve<ConsumerA>())
等LoadFrom
是一种方便的方法,如果由于某种原因不再方便,请跳过它。
关于rabbitmq - MassTransit 和 Unity - 如何避免向消费者发送重复的消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21292833/