2011-04-15 102 views
2

这是我在StackOverflow上的第一篇文章。重新配置NServiceBus丢失消息

我试图把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似乎不起作用。

回答

0

@ bsf的回答

我找到了解决办法。 CreateBus()返回IStarableBus。如果我保留一个静态引用,并在我的下一个CreateBus()调用之前处理它,一切似乎都可以正常工作。