Quartz.Net 调度程序在 Azure 中不起作用

Posted

技术标签:

【中文标题】Quartz.Net 调度程序在 Azure 中不起作用【英文标题】:Quartz.Net Scheduler not working in Azure 【发布时间】:2020-11-05 06:24:18 【问题描述】:

所以我在 C# 中使用 Quartz.Net 创建了一个 SimpleSchedular,如下所示 -

我在 WebApi 项目中创建了这个。

// Grab the Scheduler instance from the Factory
 NameValueCollection props = new NameValueCollection
 
      "quartz.serializer.type", "binary" 
 ;
 StdSchedulerFactory factory = new StdSchedulerFactory(props);
 IScheduler scheduler = await factory.GetScheduler();

 // and start it off
 await scheduler.Start();

 // define the job and tie it to our HelloJob class
 IJobDetail job = JobBuilder.Create<IDGJob>()
     .WithIdentity("job1", "group1")
     .Build();

ITrigger trigger = TriggerBuilder.Create()
    .WithIdentity("trigger1", "group1")
    .StartNow()
    .WithSimpleSchedule(x => x.WithIntervalInMinutes(5).RepeatForever())
    .Build();

 // Tell quartz to schedule the job using our trigger
 await scheduler.ScheduleJob(job, trigger);

这在 localhost 中就像一个魅力,但是一旦我将它部署到 Azure,它就什么也没做。

所以我做了一些谷歌搜索,发现 Azure 在东部标准时间运行 -

var timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
var cronScheduleBuilder = CronScheduleBuilder.DailyAtHourAndMinute(19, 10)
                                              .InTimeZone(timeZoneInfo);

并将调度程序更改为 -

 ITrigger trigger = TriggerBuilder.Create()
     .StartNow()
     .WithSchedule(cronScheduleBuilder)
     .Build();

我也尝试过 UTC 格式。

但仍然没有任何效果。

我什至使用了RoleEntryPoint 类,但结果还是一样。

这个 Quartz 真的可以在 Azure 上运行吗?或者我错过了什么。

【问题讨论】:

【参考方案1】:

它有效,但您的网络应用很可能会离线。确保您始终启用:

【讨论】:

好的,在有人点击 url 后网站还能保持多久?换句话说,如果网站保持空闲状态,在经过多长时间后会进入 SLEEP 通常是 20 分钟 所以在这种情况下,如果我每 5 分钟安排一次作业。然后,如果有人来打它,调度程序肯定会在这种情况下运行。是吗? 好吧,在我的情况下,AlwaysON 选项由于定价而关闭。因此,我正在尝试设计一种运行调度程序的方法。 迁移到 Azure Functions 并使用本机时间触发器(并使用消耗计划)

以上是关于Quartz.Net 调度程序在 Azure 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

windows任务调度程序和hangfire(或Quartz.net)有啥区别? [关闭]

TopShelf+Quartz.net实现基于window服务的定时调度

Quartz.NET 入门

Quartz.NET总结Quartz 远程调度

Quartz.Net

quartz3.0.7和topshelf4.2.1实现任务调度