Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure 当计划的WebJob运行很长时间时会发生什么_Azure_Azure Web App Service_Azure Webjobs - Fatal编程技术网

Azure 当计划的WebJob运行很长时间时会发生什么

Azure 当计划的WebJob运行很长时间时会发生什么,azure,azure-web-app-service,azure-webjobs,Azure,Azure Web App Service,Azure Webjobs,如果Azure WebJob计划运行,但上一个运行实例尚未完成,会发生什么情况?它是否会再次运行WebJob,以便同时运行两个WebJob?它不会运行WebJob并重新开始计时吗?我在任何地方都找不到这种行为的记录。我想每小时运行一次作业,但有时可能需要一个多小时才能完成,但我从不希望两个作业同时运行。据我所知,计划的Web作业只会触发使用Azure Scheduler运行的Web作业,如果在管理门户中打开Azure Scheduler,您可以看到webjobs,甚至可以更详细地配置它们。(你也

如果Azure WebJob计划运行,但上一个运行实例尚未完成,会发生什么情况?它是否会再次运行WebJob,以便同时运行两个WebJob?它不会运行WebJob并重新开始计时吗?我在任何地方都找不到这种行为的记录。我想每小时运行一次作业,但有时可能需要一个多小时才能完成,但我从不希望两个作业同时运行。

据我所知,计划的Web作业只会触发使用Azure Scheduler运行的Web作业,如果在管理门户中打开Azure Scheduler,您可以看到webjobs,甚至可以更详细地配置它们。(你也可以看到日志,它会给你问题的简单答案)

如果您想了解计划的webjob是作为Kudu触发的webjob运行的,如果您查看Kudu源代码,您将看到在启动作业时创建了锁定文件,如果您尝试启动另一个作业


Azure调度器使用webhook调用您的作业,该webhook将告诉您:“无法启动新运行,因为作业已在运行。”

我发现限制WebJob执行的最佳方法是使用计划的WebJob,使用内置队列对要完成的工作进行排队,然后创建一个单独的WebJob,该WebJob将在出现新队列消息时连续运行,但将BatchSize设置为1。这有效地防止了任何作业并发执行

下面是WebJob中的一些示例代码,用于对消息进行排队

类程序
{
静态void Main()
{
var host=new JobHost();
调用(typeof(Functions).GetMethod(“QueueSomething”);
}
}
公共类功能
{
[NoAutomaticTrigger]
公共静态void QueueSomething([Queue(“myqueue”)]ICollector消息,TextWriter日志)
{
//在这里做一些工作,创建一条消息传递给另一个WebJob,以便它可以执行您的任务
string x=“序列化要传递的某些数据或指令”;
//如果我想传递一些要做的事情,请使用上面的ICollector并将其添加到队列中
string x2=“要执行的其他任务”;
//将json添加到WebJobs队列
添加(x);
消息。添加(x2);

}
使用触发器跳过您的第一个作业,只设置Azure scheduler将消息发送到存储队列不是更简单吗?当然,如果您想取消将消息放入队列的第一个WebJob,您只需公开任何REST端点即可。使用WebJob在队列上弹出消息更简单,因为t为您处理所有管道。您只需为WebJobs创建存储帐户,将存储连接字符串放入您的web.config或门户中,WebJobs完成其余工作。