我遇到了问题,因为有一段时间,我们无法停止NServiceBus Windows服务。如果我们尝试,我们会得到这个例外:
错误1061:此时服务无法接受控制消息。
不幸的是,我真的没有找到关于此事的任何事情,但这个Github问题:https://github.com/Particular/NServiceBus/issues/1898
可悲的是,这并没有帮助,因为我们实际上需要IConfigureThisEndpoint
接口来配置BusConfiguration
,这也不是长期运行的。我们也使用几乎完全相同的模板用于其他NServiceBus-Endpoints,它们没有任何问题。
有趣的是,它也适用于此Endpoint很长一段时间,它似乎也只是一个特定服务器的问题。
是否有可能找到有关异常的更多信息,无论是来自Microsoft还是NServiceBus?
答案 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服务应该关闭,除非它们包含阻止关闭的错误。
此外,在关机期间,容器也被丢弃。可能是您的容器具有需要进行大量清理/拆卸的资源。例如,将内存缓存刷新到磁盘或远程存储的资源,以便下次启动服务时,它可以比正常情况更快地启动。