在 Quartz.Net - windows 服务或单例中安排 Web 服务
scheduling web services in Quartz.Net - windows service or singleton
我有一个 Web 应用程序 运行 在后端处理大量数据处理作业,因此我不想让服务器停滞不前,我想安排作业并决定尝试 Quartz.Net .
我想最明显的事情是将调度程序创建为 windows 服务。我有类似 运行ning 的东西,但发现 windows 服务有点麻烦,原因有几个(其中之一是如果它崩溃,则需要手动重新启动)。
我认为更优雅的方式是将服务创建为单例,我的问题是:
如果我有多个 ashx 后端调用,我可以这样声明吗:
public static IScheduler Scheduler { get; private set; }
在每个 ashx 中,它将是所有后端调用的单例?
我可以检查 运行ning 作业 scheduler.GetCurrentlyExecutingJobs();
并在没有作业时关闭调度程序吗?
我想使用 Quartz.Net 的主要原因是限制并发作业的数量 运行,所以基本上我只是创建简单的作业 运行现在。因此,根据我的阅读,如果没有可用的线程,作业将被拒绝,然后在线程再次可用时处理。 scheduler.GetCurrentlyExecutingJobs();
return 所有 rejected/waiting 工作也是如此吗?
- 如果调度程序出现故障,我该如何启动它?它可能已关闭,因为 IIS 关闭了它,或者如果没有作业 运行ning,我的代码关闭了它。理想情况下,如果我添加一个新作业,调度程序将启动。我想,我可以在一个数组中维护我自己的作业列表并像那样管理它——或者有没有办法直接通过 Quartz 来做到这一点?或者我最好像这样使调度程序永久化 - IIS app pool recycle + quartz scheduling?
由于您有多个问题,为了清楚起见,我将它们复制到这里:
- 如果我有几个 ashx 后端调用,我可以这样声明吗...
如果您为 ashx 定义了多个 class,那么每个 class 都会获得一个新的调度程序实例。所以不,只是在每个人身上声明一个 private static 属性 不会给你一个单身人士。如果您在 global.asax 文件中声明一个 public static 属性,那么是的,您将拥有一个单身人士。
- 我可以检查 运行 个工作 scheduler.GetCurrentlyExecutingJobs();如果没有,关闭调度程序?
是的。或者,您可以调用关闭方法并使用允许您指定是否等待所有作业完成的重载
- scheduler.GetCurrentlyExecutingJobs(); return 所有 rejected/waiting 个职位?
没有,只是目前正在执行的。如果需要,您可以通过调用 GetJobKeys and then perhaps calling GetJobDetail 从调度程序中获取计划作业列表。
- 如果调度程序出现故障,我该如何启动它?
您可以调用 Start 来启动调度程序,但如果您已经调用了 Shutdown 则不能调用它,因此,您必须创建一个新的调度程序实例然后启动它。
我有一个 Web 应用程序 运行 在后端处理大量数据处理作业,因此我不想让服务器停滞不前,我想安排作业并决定尝试 Quartz.Net .
我想最明显的事情是将调度程序创建为 windows 服务。我有类似 运行ning 的东西,但发现 windows 服务有点麻烦,原因有几个(其中之一是如果它崩溃,则需要手动重新启动)。
我认为更优雅的方式是将服务创建为单例,我的问题是:
如果我有多个 ashx 后端调用,我可以这样声明吗:
public static IScheduler Scheduler { get; private set; }
在每个 ashx 中,它将是所有后端调用的单例?
我可以检查 运行ning 作业
scheduler.GetCurrentlyExecutingJobs();
并在没有作业时关闭调度程序吗?我想使用 Quartz.Net 的主要原因是限制并发作业的数量 运行,所以基本上我只是创建简单的作业 运行现在。因此,根据我的阅读,如果没有可用的线程,作业将被拒绝,然后在线程再次可用时处理。
scheduler.GetCurrentlyExecutingJobs();
return 所有 rejected/waiting 工作也是如此吗?- 如果调度程序出现故障,我该如何启动它?它可能已关闭,因为 IIS 关闭了它,或者如果没有作业 运行ning,我的代码关闭了它。理想情况下,如果我添加一个新作业,调度程序将启动。我想,我可以在一个数组中维护我自己的作业列表并像那样管理它——或者有没有办法直接通过 Quartz 来做到这一点?或者我最好像这样使调度程序永久化 - IIS app pool recycle + quartz scheduling?
由于您有多个问题,为了清楚起见,我将它们复制到这里:
- 如果我有几个 ashx 后端调用,我可以这样声明吗...
如果您为 ashx 定义了多个 class,那么每个 class 都会获得一个新的调度程序实例。所以不,只是在每个人身上声明一个 private static 属性 不会给你一个单身人士。如果您在 global.asax 文件中声明一个 public static 属性,那么是的,您将拥有一个单身人士。
- 我可以检查 运行 个工作 scheduler.GetCurrentlyExecutingJobs();如果没有,关闭调度程序?
是的。或者,您可以调用关闭方法并使用允许您指定是否等待所有作业完成的重载
- scheduler.GetCurrentlyExecutingJobs(); return 所有 rejected/waiting 个职位?
没有,只是目前正在执行的。如果需要,您可以通过调用 GetJobKeys and then perhaps calling GetJobDetail 从调度程序中获取计划作业列表。
- 如果调度程序出现故障,我该如何启动它?
您可以调用 Start 来启动调度程序,但如果您已经调用了 Shutdown 则不能调用它,因此,您必须创建一个新的调度程序实例然后启动它。