簡體   English   中英

延長 Azure 應用服務中正常關機的超時時間

[英]Extend timeout for graceful shutdown in Azure App Service

設置

我正在使用IHostApplicationLifetime.ApplicationStopping.Register()注冊一種方法,以便在使用 Azure 門戶中的停止按鈕停止時正常關閉 Azure 應用程序服務(.NET 6.0、Windows 64 位、托管管道版本:“集成”)。 出於測試目的,我在回調方法中添加了以下循環來模擬緩慢關機:

for (int i = 0; i < 300; i++) // wait 5 mins
{
    Thread.Sleep(TimeSpan.FromSeconds(1));
    Console.WriteLine($"Waited {(i + 1) * 1} s.");
}

問題

在Azure Portal的App Service頁面點擊停止按鈕正確調用了回調,但仍然在大約30s后殺死了進程,從日志中可以看出。 期望的行為是在進程退出之前看到 output 中記錄的完整 300 秒。

到目前為止我嘗試了什么

Program.Main中增加關閉超時:

WebHost.CreateDefaultBuilder(args)
    .UseShutdownTimeout(TimeSpan.FromMinutes(10)) // give enough time for graceful shutdown
    .UseStartup<Startup>();

web.config中增加關機時間限制:

 <aspNetCore shutdownTimeLimit="600" processPath=".\MyService.exe" hostingModel="inprocess" />

這些解決方案均無效。

我幾乎可以肯定該系統不是為您簡單地放置一個在關機時停止的循環而設計的。 它會在某個時候意識到完成線程沒有意義,並終止它。

嘗試制作一個響應時間較長的 API,或者其他不是簡單循環的東西。 然后改用它。

您決定在這里嘗試的是浪費資源,並且沒有適當的過程文檔; 您應該嘗試其他方法,如果問題仍然存在,請提出問題。

有一天我遇到了同樣的問題,並通過配置托管服務解決了這個問題。 使用此代碼:

WebHost.ConfigureServices((hostContext, services) => {
  services.Configure<HostOptions>(options => options.ShutdownTimeout = TimeSpan.FromSeconds(600));
});

如果刪除它,請添加此代碼:

WebHost.CreateDefaultBuilder(args)
  .UseShutdownTimeout(TimeSpan.FromMinutes(10))
  .UseStartup<Startup>();

您可以在此處嘗試答案。 IApplicationRuntime注入您的Configure方法並在其中使用以下行:

applicationLifetime.ApplicationStopping.Register(OnShutdown);

在方法OnShutdown中,您可以完成緩慢的工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM