多个Quartz.NET调度程序服务和单个Web应用程序

时间:2013-06-07 17:59:16

标签: quartz-scheduler quartz.net quartz.net-2.0

我有一个场景,我可以在一台服务器上运行一对多的Quartz调度程序实例。基本上,您可以将其设想为公司内的每个部门都可以获得自己的调度程序实例。每个调度程序都由它自己独特的石英数据库支持,每个调度程序都包含在它自己独特的Windows服务中。为了更好地说明:

服务器1

  • Accounting_WindowsService - > Accounting_QuartzScheduler - > QuartzAccountingDatabase
  • Sales_WindowsService - > Sales_QuartzScheduler - > QuartzSalesDatabase
  • IT_WindowsService - > IT_QuartzScheduler - > QuartzITDatabase

服务器2

  • Management_WindowsService - > Management_QuartzScheduler - > QuartzManagementDatabase
  • HR_WindowsService - > HR_QuartzScheduler - > QuartzHRDatabase

在一个完全独立的服务器上,我有一个网站,供公司内所有部门使用。但是这个站点需要能够路由到正确的Quartz调度程序,以便用户可以安排和维护自己的作业,以及查看现有的作业及其状态等。例如,如果我作为成员登录Web应用程序销售部门我只希望看到QuartzSalesDatabase安排的作业,如果我想安排一个新工作,我需要一个机制来获得所需的Sales_QuartzScheduler处理。如何最好地实现这一目标?感谢

1 个答案:

答案 0 :(得分:0)

  

我需要一种机制来处理所需的Sales_QuartzScheduler。

实际上,您只需要一个类似配置的调度程序。因此,您可以像对待服务那样完全相同,但实际上并不启动调度程序。

例如,像这样的东西可以工作

var  col = new System.Collections.Specialized.NameValueCollection();
col.Add("quartz.threadPool.threadCount" ,"10" );
col.Add("quartz.threadPool.threadPriority" ,"Normal" );
col.Add("quartz.jobStore.misfireThreshold" ,"60000" );
col.Add("quartz.jobStore.type" ,"Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" );
col.Add("quartz.jobStore.useProperties" ,"false" );
col.Add("quartz.jobStore.dataSource" ,"default" );
col.Add("quartz.jobStore.tablePrefix", "QRTZ_");
col.Add("quartz.jobStore.clustered" ,"true" );
col.Add("quartz.jobStore.lockHandler.type" ,"Quartz.Impl.AdoJobStore.SimpleSemaphore, Quartz" );
col.Add("quartz.dataSource.default.provider" ,"SqlServer-20" ); 


col.Add("quartz.scheduler.instanceName",  ... );
col.Add("quartz.scheduler.instanceId" ,  ... );
col.Add("quartz.dataSource.default.connectionString" , ...);


var schedulerFactory = new Quartz.Impl.StdSchedulerFactory();
schedulerFactory.Initialize(col);

var scheduler = schedulerFactory.GetScheduler();