2016-08-17 282 views
0

我有問題,那是因爲有些時候,我們無法停止NServiceBus Windows服務。如果我們嘗試,我們會得到以下例外:NServiceBus Windows服務:無法停止服務

錯誤1061:此時服務無法接受控制消息。

不幸的是,我還真沒發現這件事情,但這個Github上發出什麼:https://github.com/Particular/NServiceBus/issues/1898

可悲的是,這並沒有幫助,因爲我們需要的其實IConfigureThisEndpoint接口,配置BusConfiguration ,這也不是那麼長時間。我們也爲其他NServiceBus-Endpoint使用幾乎完全相同的模板,這些模板沒有任何問題。

有趣的是,它在這個端點工作了相當長的一段時間,它也似乎只是一個特定服務器的問題。

有沒有可能找到更多關於異常的信息,無論是來自微軟還是NServiceBus?

+0

你可以在另一臺服務器上重現這個嗎?你正在運行什麼版本的NServiceBus?你在使用主機嗎? –

+0

嗨,目前我不能在任何其他服務器上重現它,我們使用RavenDB和MSMQ的5.2.8版NServiceBus。是的,據我所知,windows-service是背後的主機shell,或者你可以詳細說明「使用主機」的含義嗎? –

+0

只是我的意思是nservicebus.host.exe –

回答

1

優雅關機

此錯誤可能是由很多原因引起的。 NServiceBus將只嘗試執行正常關機。

NServiceBus不會中止當前正在處理但將停止處理新消息的消息。

日誌文件

日誌文件應指示關閉被觸發,這樣是可以驗證的第一件事。

我會建議將日誌級別設置爲DEBUG幫助診斷停止序列也補充一點:

var appDomainLogger = LogManager.GetLogger("AppDomain"); 
var appDomain = AppDomain.CurrentDomain 
appDomain.FirstChanceException += (o, ea) => { 
    appDomainLogger.Debug("FirstChanceException", ea.Exception); 
}; 
appDomain.UnhandledException += (o, ea) => { 
    appDomainLogger.Debug("UnhandledException", ea.ExceptionObject as Exception); 
}; 

這可能是因爲發生異常防止停機,這增加了額外的診斷。

長時間運行的消息

例如,如果正在處理一條消息,正在等待數據庫鎖被釋放則此消息可能需要那麼多的時間窗口服務接口允許。

其他任務,如轉換的媒體文件

最終,窗口服務應該關閉,如果所有的資源被釋放和消息處理完畢後,除非它們含有可以防止關機的錯誤。

處理資源

此外,在關閉期間,容器也被處理。這可能是因爲你的容器有很多清理/拆卸的資源。例如,將內存高速緩存刷新到磁盤或遠程存儲的資源,以便在下次啓動服務時啓動速度更快,然後正常啓動。

+0

非常感謝您的見解,我會檢查出來。這是我們使用薩加斯的唯一主機,可能也會發揮作用。 –