如何处理azure web作业挂起重启

时间:2017-06-09 17:20:03

标签: azure-webjobs azure-webjobssdk

我目前正在使用队列触发器使用azure web作业,所以每当队列中有消息时,我会调用一个功能,该任务将耗时15分钟(将数据推送到文档DB),并且能够做到,现在我的Azure应用程序计划正在获得套接字异常,并且Web启动自行重启,并且再次在进入毒性队列之前重试此函数多次。

我想知道的几件事

  1. 如何处理异常并进行一些日志记录?
  2. 如何在再次启动Web作业之前删除队列中的现有消息,以便我们不进行并发操作?
  3. 在Web作业关闭之前是否会触发任何事件以便我可以执行任何操作
  4. 感谢任何帮助或指示

1 个答案:

答案 0 :(得分:0)

  

如何处理异常并进行一些记录?

要处理WebJob中的异常,您可以在WebJob中添加try-catch并将所有Job代码放在try块中。

另一种方法是使用ErrorTrigger,我们需要安装 Azure WebJobs SDK Extensions在使用之前。

  

如何在再次启动Web作业之前删除队列中的现有消息,以便我们不进行并发操作?

您可以将MaxDequeueCount属性更改为1.如果发生异常,该消息将立即移至毒性队列。

JobHostConfiguration config = new JobHostConfiguration();
config.Queues.MaxDequeueCount = 1;
JobHost host = new JobHost(config); 
  

在Web作业关闭之前是否会触发任何事件以便我可以执行任何操作

我还没有找到任何在网络工作关闭之前被解雇的事件。有两件事会导致网络工作关闭。

  1. 发生异常,我们可以使用try-catch块或ErrorTrigger记录异常。

  2. 由于Web App Plan重新启动,Web作业中止。我们可以在函数中添加一个CancellationToken类型参数,由于Web App Plan重新启动,在WebJob中止之前,IsCancellationRequested属性将设置为true。

  3. public static void ProcessQueueMessage2([QueueTrigger("myqueue")] string message, CancellationToken cancellationToken)
    {
        Task.Run(new Action(LongRunningTask), cancellationToken);
        while (true)
        {
            Thread.Sleep(5000);
            if (cancellationToken.IsCancellationRequested)
            {
                Console.WriteLine("The function has been Cancelled");
            }
        }
    }
    
    public static void LongRunningTask()
    {
    
    }
    

    在WebJob中止之前,输出将是这样的。

    [06/12/2017 01:55:38 > 9d3635: SYS INFO] Status changed to Stopping
    [06/12/2017 01:55:42 > 9d3635: INFO] The function has been Cancelled
    [06/12/2017 01:55:43 > 9d3635: SYS INFO] WebJob process was aborted
    [06/12/2017 01:55:43 > 9d3635: SYS INFO] Status changed to Stopped