如何在回收/重新启动后使用TimeTrigger自动启动Azure WebJob WebApp
我在Azure WebApp中使用WebJob。该作业执行的方法:如何在回收/重新启动后使用TimeTrigger自动启动Azure WebJob WebApp
public static void ProcessQueue(
[TimerTrigger("00:02:00")] TimerInfo timerInfo,
[Queue("queue")] CloudQueue queue,
[Table("processing")] CloudTable processingTable,
TextWriter log)
{
// do sth...
}
的TimeTrigger
选项来自Microsoft.Azure.WebJobs.Extensions。
我将WebApp设置为在"always on" mode中运行。
但是,如果我正在重新启动或更改应用程序设置,WebApp可能会在内部进行回收?我认为。
因为在这之后我收到以下错误:
[11/10/2016 08:22:24 > 36d12e: SYS ERR ] WebJob run failed due to: System.Threading.ThreadAbortException: Thread was being aborted. at Kudu.Core.Jobs.BaseJobRunner.RunJobInstance(JobBase job, IJobLogger logger, String runId, String trigger, ITracer tracer, Int32 port) at Kudu.Core.Jobs.TriggeredJobRunner.<>c__DisplayClass10_1.b__0(Object _)
于是,我就设定一个时间表上WebJob,我也试过在目录中粘贴一个cron时间表,但没有任何帮助我出去把重置/回收后的工作“运行”。
更新1
我的EXE文件的内容(Main()
)
JobHostConfiguration config = new JobHostConfiguration();
config.Tracing.ConsoleLevel = TraceLevel.Verbose;
config.Queues.MaxDequeueCount = 10;
config.UseCore();
config.UseTimers();
var host = new JobHost(config);
host.RunAndBlock();
更新2
如果我在Azure的门户网站都手动部署为连续运行的预期(感谢mathewc)。但这是手动步骤;)。我处于DevOps场景中,所有内容都将由Visual Studio团队服务构建,创建和部署,您无法设置任何选项将作业部署为连续作业。
基于你已经证明调用堆栈上,它看起来像你可能没有正确地部署自己的工作为触发而不是连续 WebJob?使用WebJobs SDK时,应按照here所述的方式将WebJobs部署为连续的。
一旦以连续模式运行,您是正确的,如果您更改应用程序设置或以其他方式导致重新启动,WebJobs也将重新启动。然而,TimerTrigger的内部调度程序将确保作业在其恢复时按计划继续运行。
谢谢。更新我的问题。此手动步骤正在运行... – Martin
请参阅[本页](https://blogs.msdn.microsoft.com/tfssetup/2016/05/18/deploying-and-schedule-azure-webjobs-from-vsts-to -azure-web-app-with-bonus-cron-scheduling /)了解有关设置自动VSTS部署的详细信息。该页面部署了一个OnDemand,但如果您选择连续,您将获得所需的内容。 – mathewc
听起来像个好主意。之前找到了这个页面,但在Visual Studio发布中本地配置调度程序并不奇怪,然后这个配置将用于通过vsts进行部署? – Martin
你还可以分享你的exe启动代码,所以我可以看到你是否正确启动WebJobs SDK JobHost? – mathewc
@mathewc:已添加为Update1 – Martin