天蓝色的连续Web作业正在运行,但有时已意外停止/重新启动

时间:2019-01-09 10:36:06

标签: azure-webjobs

我们的应用程序正在使用Web作业生成数据,有一段时间我们遇到了一个问题,即它在处理消息队列时有时被意外停止/重新启动。这会导致我们的webjob不知道何时强制重新启动/停止以标记要处理的数据,然后再让webjob重新启动/停止。

是否有获取停止/重新启动通知以同步数据的想法?

非常感谢!

3 个答案:

答案 0 :(得分:1)

如果您使用队列,则重新启动Webjob不会导致您丢失任何数据。由于该消息不会完成,因此会将其放回到队列中进行(重新)处理。

就重启而言:请确保您的代码中没有任何可以完全破坏webjob的方案。

添加Application Insights并为您要查找的特定情况添加警报。

请参见Set Alerts in Application Insights

答案 1 :(得分:0)

有时,网络作业可能会因按比例扩大程序而被杀死。您可以通过使用nuget软件包Microsoft.Azure.WebJobs.WebJobsShutdownWatcher中的类Microsoft.Azure.WebJobs来监听关闭事件,以确保它们正常退出。 与nuget软件包的1.1.2版本一样:

public sealed class WebJobsShutdownWatcher : IDisposable
{
    //     Begin watching for a shutdown notification from Antares.
    public WebJobsShutdownWatcher();

    //     Get a CancellationToken that is signaled when the shutdown notification is detected.
    public CancellationToken Token { get; }

    //     Stop watching for the shutdown notification
    public void Dispose();
}

一种使用此方法的方法:在您的webjob Program.cs类中,您将获得取消令牌并编写要在关机时执行的代码。

private static void Main()
{
    ...
    var cancellationToken = new WebJobsShutdownWatcher().Token;
    ...
    cancellationToken.Register(() =>
    {
        //Your data operations here
    });
    ...
}

答案 2 :(得分:0)

感谢戴安娜提供的信息。我尝试了这种方法,但是效果不是很好,尽管我在settings.job文件中设置了60秒,但webjob只是等待5秒才能重新启动/停止。这是我的下面的代码

    static void Main()
    {
        var config = new JobHostConfiguration();

        var host = new JobHost();

        var cancellationToken = new WebJobsShutdownWatcher().Token;
        cancellationToken.Register(() =>
        {
            //Raise the signal
        });

        // The following code ensures that the WebJob will be running continuously
        host.RunAndBlock();
    }