【问题标题】:Reconfiguring NServiceBus Loses Messages重新配置 NServiceBus 丢失消息
【发布时间】: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


    【解决方案1】:

    @bsf 的回答

    我找到了解决方案。 CreateBus() 返回一个 IStarableBus。如果我保留对它的静态引用并在下次调用 CreateBus() 之前将其处理掉,那么一切似乎都正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-15
      • 1970-01-01
      • 1970-01-01
      • 2023-01-31
      • 1970-01-01
      相关资源
      最近更新 更多