2011-04-15 104 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()調用之前處理它,一切似乎都可以正常工作。