NServiceBus Windows服务:服务无法停止

时间:2016-08-17 17:58:04

标签: c# windows-services nservicebus

我遇到了问题,因为有一段时间,我们无法停止NServiceBus Windows服务。如果我们尝试,我们会得到这个例外:

  

错误1061:此时服务无法接受控制消息。

不幸的是,我真的没有找到关于此事的任何事情,但这个Github问题:https://github.com/Particular/NServiceBus/issues/1898

可悲的是,这并没有帮助,因为我们实际上需要IConfigureThisEndpoint接口来配置BusConfiguration,这也不是长期运行的。我们也使用几乎完全相同的模板用于其他NServiceBus-Endpoints,它们没有任何问题。

有趣的是,它也适用于此Endpoint很长一段时间,它似乎也只是一个特定服务器的问题。

是否有可能找到有关异常的更多信息,无论是来自Microsoft还是NServiceBus?

1 个答案:

答案 0 :(得分: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); 
};

可能会发生阻止关机的异常,这会增加额外的诊断。

长时间运行的消息

例如,如果正在处理正在等待数据库锁定被释放的消息,那么此消息可能需要更多时间,然后Windows服务接口才允许。

转换媒体文件等其他任务

最终,如果释放所有资源并且消息处理完毕,则Windows服务应该关闭,除非它们包含阻止关闭的错误。

处置资源

此外,在关机期间,容器也被丢弃。可能是您的容器具有需要进行大量清理/拆卸的资源。例如,将内存缓存刷新到磁盘或远程存储的资源,以便下次启动服务时,它可以比正常情况更快地启动。

相关问题