2014-02-05 33 views
0

我创建了一个使用QueueInput触发器的简单Azure WebJob。它部署没有任何问题,我已经通过管理门户安排它,以便'持续运行'WebJob不触发

初始测试看起来很好,在将任何内容放入队列后不久就会触发作业。

偶然我在放置其他任何物品前约一天离开它。这次工作几分钟内没有触发,所以我登录到门户查看调用日志 - 这表明该工作刚刚触发了这一刻。

这似乎太巧合了,所以我把它放在队列中前一天离开它。再次,这项工作没有触发。我一夜之间离开了它,直到早晨它仍然没有触发。

这次我登录到管理门户时,我注意到WebJobs页面上的作业被标记为“中止”。这只是在状态变为“正在运行”之前的大约10秒钟。然后,这个工作立即引发了前一天晚上排队的事情,如预期的那样。

因为这是一个alpha版本,我期待毛刺。只是想知道其他人是否有过类似的经历。

+0

请您分享工作代码吗? –

+0

另外,您是否使用免费的网站或哪一个? –

+0

网站正在共享模式下运行,而不是免费。 – iturner100

回答

2

对于WebJobs SDK,您的作业必须运行以侦听触发器(新队列消息,新斑点等)。 Azure网站免费套餐有配额,会让你的工作进入睡眠状态,这意味着它不再监听触发器。使用该网站可能会使其恢复生命并开始再次聆听触发器。

如果主机作业未运行(它通过检测信号检测到),SDK仪表板将在函数旁边显示警告图标。

+0

该作业在包含mvc和webapi的网站中运行。 Json被发布到webapi,最终导致项目被放入存储队列。 网络作业有一个队列触发器发布到外部api 因此,根据事件的顺序,它将表明webjob的生命周期_isn't_链接到网站本身的生命周期。 根据原始文章,仪表板简要显示作业“中止”,然后似乎将作业回收到“正在运行”状态。 可能相关的一件事是我的工作是使用异步方法... – iturner100

+0

SDK尚未支持异步。我建议先把它全部同步。 当Web作业(即引用Microsoft.WindowsAzure.Jobs.JobHost的C#代码)正在运行时,它会产生心跳。仪表板检测到心脏跳动以确定主机是否意外中止。如果主机未运行,仪表板将使用它来警告您。 –

2

确保您的网站配置为“Always On”设置为Enabled。

如果您的站点包含连续运行的作业,如果禁用此设置,它们可能无法可靠地执行。

http://azure.microsoft.com/en-us/documentation/articles/web-sites-configure/

默认情况下,网站被卸载,如果他们已经闲置了一段时间。这使系统节约资源。如果站点需要始终加载,则可以在标准模式下为站点启用始终开启设置。由于连续网络作业可能无法可靠地运行,如果始终打开处于禁用状态,则应在网站上运行连续的网络作业时启用始终打开。