0

1 つのサーバーで 1 対多の Quartz スケジューラ インスタンスを実行できるシナリオがあります。基本的には、会社内の各部門が独自のスケジューラ インスタンスを取得していると考えることができます。各スケジューラは、独自の独自の 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

完全に別のサーバー上に、社内のすべての部門で使用される単一の Web サイトがあります。ただし、このサイトは正しい Quartz スケジューラにルーティングできる必要があるため、ユーザーは自分のジョブをスケジュールおよび維持したり、既存のジョブとそのステータスなどを表示したりできます。たとえば、メンバーとして Web アプリにログインすると、 QuartzSalesDatabase にスケジュールされたジョブのみを表示したいのですが、新しいジョブをスケジュールする場合は、そのために必要な Sales_QuartzScheduler のハンドルを取得するメカニズムが必要です。これはどのように達成するのが最善でしょうか? ありがとう

4

1 に答える 1

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();
于 2013-06-07T18:43:07.230 に答える