我正在组建一个需要扩展预定工作的系统。我正在使用 Quartz.Net 通过 CRON 触发器安排多个作业。作业的设计使得它们对于跨多个 Azure 角色实例的并发执行是安全的。
所有可用信息似乎都是关于确保 Quartz.Net 不会在多台机器上同时执行相同的作业,这是我目前看到的行为。
我实际上需要相反的(本质上是一个池而不是 Quartz.Net 调度程序集群)。例如,我想在 TimeY 跨两个角色实例执行 JobX。我希望同时发生两次处决。我目前只能让 Quartz 执行一个。
该实现当前使用具有两个实例的单个 Web 角色。从长远来看,这将随着许多工作角色实例也执行相同的计划任务而扩展。每个角色实例都会启动自己的调度程序实例并启动它。他们使用相同的石英配置,如下所示。
<?xml version="1.0" encoding="utf-8" ?>
<quartz>
<add key="quartz.scheduler.instanceId" value="AUTO"/>
<add key="quartz.scheduler.instanceName" value="QuartzScheduler" />
<!-- Configure Thread Pool -->
<add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz" />
<add key="quartz.threadPool.threadCount" value="10" />
<add key="quartz.threadPool.threadPriority" value="Normal" />
<!-- Configure Job Store -->
<add key="quartz.jobStore.clustered" value="true"/>
<add key="quartz.jobStore.misfireThreshold" value="60000" />
<add key="quartz.jobStore.type" value="Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" />
<add key="quartz.jobStore.driverDelegateType" value="Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz" />
<add key="quartz.jobStore.tablePrefix" value="quartz.QRTZ_" />
<add key="quartz.jobStore.dataSource" value="config" />
<add key="quartz.dataSource.config.provider" value="SqlServer-20" />
<add key="quartz.plugin.xml.type" value="Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz" />
<add key="quartz.plugin.xml.fileNames" value="~/QuartzJobs.config" />
</quartz>
如何让 Quartz.Net 在多台机器上执行并发作业?