我目前正在使用队列触发器使用azure web作业,所以每当队列中有消息时,我会调用一个功能,该任务将耗时15分钟(将数据推送到文档DB),并且能够做到,现在我的Azure应用程序计划正在获得套接字异常,并且Web启动自行重启,并且再次在进入毒性队列之前重试此函数多次。
我想知道的几件事
感谢任何帮助或指示
答案 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作业关闭之前是否会触发任何事件以便我可以执行任何操作
我还没有找到任何在网络工作关闭之前被解雇的事件。有两件事会导致网络工作关闭。
发生异常,我们可以使用try-catch块或ErrorTrigger记录异常。
由于Web App Plan重新启动,Web作业中止。我们可以在函数中添加一个CancellationToken类型参数,由于Web App Plan重新启动,在WebJob中止之前,IsCancellationRequested属性将设置为true。
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