我正在尝试为连续的Azure Web作业实现正常关闭,并提供所需的作业设置:
{
"stopping_wait_time": 3600,
"is_singleton": true
}
我已经注册了回调:
static void Main(string[] args)
{
var cancellationToken = new WebJobsShutdownWatcher().Token;
cancellationToken.Register(() =>
{
Console.WriteLine("Shutdown Started...");
Thread.Sleep(5000);
Console.WriteLine("Waited 5 seconds!" + DateTime.Now.ToString());
Thread.Sleep(5000);
Console.WriteLine("Waited 10 seconds!" + DateTime.Now.ToString());
Thread.Sleep(5000);
Console.WriteLine("Waited 15 seconds!" + DateTime.Now.ToString());
Thread.Sleep(5000);
Console.WriteLine("Waited 20 seconds!" + DateTime.Now.ToString());
Thread.Sleep(5000);
Console.WriteLine("Waited 25 seconds!" + DateTime.Now.ToString());
Thread.Sleep(5000);
Console.WriteLine("Waited 30 seconds!" + DateTime.Now.ToString());
});
JobHost host = new JobHost();
MethodInfo methodInfo = typeof(Functions).GetMethod("GracefulShutdown");
host.CallAsync(methodInfo); //a long running method
host.RunAndBlock();
}
但是在停止Web作业时,我永远无法获得执行回调的最后一行:
Console.WriteLine("Waited 30 seconds!" + DateTime.Now.ToString()
有什么想法吗?
答案 0 :(得分:1)
对于触发的WebJobs,没有关机通知,但有一个 优雅时段(默认为30秒),WebJob不在其中 强制关闭,优雅的时间段是可配置的。
可以为任何WebJob更新优雅时段,其方法是 使用以下内容创建名为settings.job的文件:{ “stopping_wait_time”:60}
我可以看到你的优雅时期仍然是30秒,与默认时间相同。请检查您是否已将settings.job放在正确的位置。你把它放在webjob可执行文件所在的目录中(我假设你通过门户网站上传了一个zip文件?如果是这样,只需将设置文件放在你正在使用的.exe或.cmd旁边的zip文件中)。
有关详细信息,请参阅http://blog.amitapple.com/post/2014/05/webjobs-graceful-shutdown/#.Vw3HdUcl_dV。