0
我正在組合一個需要擴展預定工作的系統。我使用Quartz.Net通過CRON觸發器安排多個作業。這些作業的設計使它們可以安全地跨多個Azure角色實例進行併發執行。跨多個Azure實例同時運行Quartz.Net作業
所有可用的信息似乎都是關於確保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在多臺機器上執行並行作業?
我認爲一種解決方案是讓每個調度程序實例(在每個角色實例中)由其自己的ADO實例實例支持。這對我不起作用,因爲我希望能夠動態地擴展角色實例。 – 2013-05-09 06:28:13
請看看我前幾天寫的博客文章:http://gauravmantri.com/2013/01/23/building-a-simple-task-scheduler-in-windows-azure/。 – 2013-05-09 07:04:41
嗨Gaurav,是的,我讀過你的文章。我不需要博客租約,因爲我希望每個作業實例同時在機器上執行。角色日誌中的屏幕截圖表明這對您有用。仍然沒有得到那一點工作。 你爲什麼使用IInterruptableJob作業? 我想我的解決方案是不使用ADO作業存儲。每個調度程序不需要知道其他調度程序,它們可以獨立執行。我不認爲ADO就業商店在我的情況下給了我什麼。 – 2013-05-09 12:20:16