如何在 recycle/restart WebApp 之后使用 TimeTrigger 自动启动 Azure WebJob
How to automatically start Azure WebJob with TimeTrigger after recycle/restart WebApp
我正在 Azure WebApp 中使用 WebJob。作业执行一个方法:
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。
我在 "always on" mode 中将 WebApp 设置为 运行。
但是如果我正在重新启动或更改应用程序设置,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 时间表,但没有任何帮助我在 reset/recycle 之后将作业带到 "running"。
更新 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 门户中手动连续部署,一切都会按预期 运行ning(感谢 mathewc)。但这是一个手动步骤;)。我处于 DevOps 场景中,所有内容都将由 Visual Studio Team Services 构建、创建和部署,并且您无法设置任何选项来部署 作业作为连续.
根据您显示的调用堆栈,您可能错误地将作业部署为 触发 而不是 连续 网络工作?使用 WebJobs SDK 时,您应该按照 here.
所述连续部署 WebJobs
一旦 运行在连续模式下,您是正确的,如果您更改应用程序设置或以其他方式导致重新启动,您的 WebJobs 也将重新启动。但是,TimerTrigger 的内部调度程序将确保作业在恢复时继续按计划 运行。
我正在 Azure WebApp 中使用 WebJob。作业执行一个方法:
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。
我在 "always on" mode 中将 WebApp 设置为 运行。
但是如果我正在重新启动或更改应用程序设置,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 时间表,但没有任何帮助我在 reset/recycle 之后将作业带到 "running"。
更新 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 门户中手动连续部署,一切都会按预期 运行ning(感谢 mathewc)。但这是一个手动步骤;)。我处于 DevOps 场景中,所有内容都将由 Visual Studio Team Services 构建、创建和部署,并且您无法设置任何选项来部署 作业作为连续.
根据您显示的调用堆栈,您可能错误地将作业部署为 触发 而不是 连续 网络工作?使用 WebJobs SDK 时,您应该按照 here.
所述连续部署 WebJobs一旦 运行在连续模式下,您是正确的,如果您更改应用程序设置或以其他方式导致重新启动,您的 WebJobs 也将重新启动。但是,TimerTrigger 的内部调度程序将确保作业在恢复时继续按计划 运行。