Azure Web作业正常关闭

时间:2016-04-12 11:10:33

标签: c# azure shutdown webjob

我正在尝试为连续的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()

有什么想法吗?

1 个答案:

答案 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