我在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。
我将WebApp设置为在"always on" mode中运行。
但是如果我正在重启或更改WebApp可能的应用程序设置,那么在内部进行回收?我认为。
因为在此之后我收到以下错误:
[11/10/2016 08:22:24> 36d12e:SYS ERR] WebJob运行失败,原因是:System.Threading.ThreadAbortException:正在中止线程。 at Kudu.Core.Jobs.BaseJobRunner.RunJobInstance(JobBase job,IJobLogger logger,String runId,String trigger,ITracer tracer,Int32 port) 在Kudu.Core.Jobs.TriggeredJobRunner。<> c__DisplayClass10_1.b__0(对象_)
所以我试着在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 Team Services 构建,创建和部署,并且您无法设置任何选项来将作业部署为连续。
答案 0 :(得分:1)
根据您显示的调用堆栈,您可能错误地将作业部署为触发而不是连续 WebJob?使用WebJobs SDK时,您应该按照here所述的方式连续部署WebJobs。
一旦以连续模式运行,您是正确的,如果您更改应用程序设置或以其他方式重新启动,您的WebJobs也将重新启动。但是,TimerTrigger的内部调度程序将确保作业在重新启动时按计划继续运行。