1

我有一个 SQL Server 数据库作为作业存储,两个都可以安排作业的 Web 应用程序,以及一个用于执行作业的 Quartz.NET Windows 服务。

我希望这两个 Web 应用程序只安排作业,而 Windows 服务只执行作业。

问题来了:

如果我在两个 Web 应用程序和 windows 服务中创建 IScheduler 实例,它们将同时执行作业,可能会发生冲突。

如果我不在两个 Web 应用程序中创建 IScheduler 实例,如何将作业从 Web 应用程序调度到 Windows 服务?

有没有办法让 IScheduler 只安排作业而不执行作业?(我可以将 IJob 程序集部署到所有这三个应用程序)

4

2 回答 2

8

您可能不想在网站中实例化 IScheduler 实例,正是因为创建本地实例也会执行作业。

我已经实现了类似于你想要做的事情。

首先,确保在您的服务配置文件 (app.config) 中配置了四个键quartz.scheduler.exporter.typequartz.scheduler.exporter.portquartz.scheduler.exporter.bindNamequartz.scheduler.exporter.channelType.

其次,确保您的 web.config 配置了以下四个键:quartz.scheduler.instanceNamequartz.scheduler.instanceIdquartz.scheduler.proxyquartz.scheduler.proxy.address

然后,当您创建StdSchedulerFactory()并使用它来获取调度程序时,您不会实例化新的调度程序,而是附加到现有的调度程序。然后,您可以通过远程调度程序执行任何可以使用本地调度程序执行的操作,但只有一个实例可以执行作业。

于 2012-08-15T14:13:10.237 回答
1

在您的配置文件中,将键“quartz.threadPool.type”设置为“Quartz.Simpl.ZeroSizeThreadPool, Quartz”。这样创建的石英调度程序可以调度/修改作业/触发器/日历,但不能运行作业。

于 2012-08-15T19:41:34.417 回答