保证Quartz.NET触发器仅在许多实例中触发事件一次

时间:2012-08-06 21:14:34

标签: multithreading triggers quartz.net appharbor

标题有点古怪,但我试图弄清楚AppHarbor的解决方法可能会触发我的后台应用程序的多个实例。该应用程序使用Quartz.NET在基本计划中将关键事件推送到我的服务器。但是,我无法保证我的后台应用程序只有一个实例,但我必须正常触发每个事件(基本上作为服务器POV中的一个单元)。

我原本试图使用锁定和Redis解决这个问题,但是我无法让它运行得很好。有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:1)

您可以通过让您的工作在每次运行后重新安排自己来完成。您没有指定计划的内容,但如果不必同时进行,则使用仅触发一次的触发器计划作业。当作业运行完毕后,让它在将来的某个时间再次安排。这样,在任何给定时间,商店中只有一份工作。您可能必须对如何加载初始作业和处理错误感到有创意,但只要您在引导时只安排一个作业,那么您就可以使其工作。

答案 1 :(得分:0)

Quartz.NET似乎有built-in support for clustering。来自文档:

  

每次触发只会触发一个节点。我的意思是,如果作业有一个重复的触发器,告诉它每10秒触发一次,那么在12:00:00正好有一个节点将运行该作业,而在12:00:10正好会有一个节点运行每次都不一定是同一个节点 - 它或多或少是随机的节点运行它。对于繁忙的调度程序(许多触发器),负载平衡机制几乎是随机的,但有利于刚刚对非繁忙(例如一个或两个触发器)调度程序有效的同一节点。