【发布时间】:2016-01-22 16:00:15
【问题描述】:
这是我在 StackOverflow 上的第一篇文章。
我正在尝试将 NServiceBus 放在如下所示的接口后面:
interface IMessagingService
{
IObserver<T> RegisterPublication<T>() where T : IPublishedMessage;
IObservable<T> RegisterSubscription<T>() where T : IPublishedMessage;
}
为了在不强制用户进行显式 Start() 调用的情况下支持此接口,我需要在每次调用 RegisterSubscription 时重新配置总线,并调用如下所示的方法:
IBus ConfigureBus()
{
Configure config = BuildConfiguration();
return config.CreateBus().Start();
}
我无法复制和粘贴真实代码,但希望您能看到,一旦调用 RegisterSubscription,我需要启动总线来监听消息。我需要在后续调用中添加订阅者。
我遇到的问题是,每次调用 ConfigureBus() 似乎都会启动更多线程并导致消息丢失。我的处理程序实例没有被调用,但 NServiceBus 记录它已完成处理每条消息。 对 RegisterSubscription 进行四次调用后,我丢失了大约 40% 的消息。
有没有一种安全的方法来重新配置和重新启动 IBus 而不会导致此问题? IBus.Subscribe 似乎不起作用。
【问题讨论】:
标签: nservicebus