我希望自托管的ASP.NET Core应用程序在收到退出信号时可以在退出前延迟一会儿。
在负载均衡之后,我有多个应用程序实例。
默认情况下,如果我关闭实例,则处理请求将被破坏。而且在很短的时间内,由于负载平衡会定期进行健康检查,因此仍有一些新请求会发送到脱机实例。
所以,如果我在退出之前能做些什么:
然后,可以“安全地”退出应用程序。它使实例可以平稳运行,用户不会感觉到它。
所以我想知道是否有官方的解决方案或最佳实践。
答案 0 :(得分:1)
我希望自托管的ASP.NET Core应用程序可以延迟一会儿 退出前,当收到退出信号时。
这是什么信号?杀死还是杀死?
让我们说您要处理TERM信号。
因此,如果您使用的是.net Core 1.X,则解决方案将是这样。 首先,您需要向json文件添加依赖项
"System.Runtime.Loader" : "<version>
然后您就可以处理SIGTERM事件向事件添加事件的方法
AssemblyLoadContext.Default.Unloading += YourMethodThatWillHandleSignal;
对于使用.NET Core 2.X,有不同的解决方案。您可以使用IApplicationLifetime
界面(documentation)。
拥有此功能时,您所能做的就是:
applicationLifetime.ApplicationStopping.Register(() => Console.WriteLine("Stopping"));
applicationLifetime.ApplicationStopped.Register(() => Console.WriteLine("Stopped"));
希望这会有所帮助。