gpt4 book ai didi

rabbitmq - MassTransit 和 Unity - 如何避免向消费者发送重复的消息?

转载 作者:行者123 更新时间:2023-12-02 21:44:42 24 4
gpt4 key购买 nike

我们正在使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com