如何安全退出自托管应用程序(退出前先做点事情)

时间:2019-08-06 22:53:03

标签: c# asp.net-core

我希望自托管的ASP.NET Core应用程序在收到退出信号时可以在退出前延迟一会儿。

在负载均衡之后,我有多个应用程序实例。

默认情况下,如果我关闭实例,则处理请求将被破坏。而且在很短的时间内,由于负载平衡会定期进行健康检查,因此仍有一些新请求会发送到脱机实例。

所以,如果我在退出之前能做些什么:

  1. 首先禁用运行状况检查,它将停止来自负载平衡的新请求。
  2. 继续处理所有已收到的请求。

然后,可以“安全地”退出应用程序。它使实例可以平稳运行,用户不会感觉到它。

所以我想知道是否有官方的解决方案或最佳实践。

1 个答案:

答案 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"));

希望这会有所帮助。