处理多个Windows服务

时间:2014-10-29 10:45:26

标签: service quartz-scheduler scheduler

我正在使用quartz创建一个Windows服务。我想在3个地方部署这个服务,它应该像一个服务停止然后第二个应该开始,如果第二个失败然后最后一个应该开始。所有服务都指向单个数据库。我可以知道如何实现这些功能。

@@更新问题

在那里,所有服务都在进行相同的操作。我在我的数据库中有一列作为nextExecutionTime,如果超过当前时间则意味着下一个服务将开始执行此作业。现在我面临的主要问题是,如果所有三个服务同时触发,那么它将从数据库中获取数据并尝试同时更新。所以我需要减少并发错误。我可以知道解决方案。我需要实现一些锁定或类似的东西吗?

2 个答案:

答案 0 :(得分:0)

这三项服务是否做同样的工作?请详细说明 !但是,如果我在不同系统上部署这些服务,他们如何相互了解?我不知道你的具体要求,但我将按如下方式完成: 假设:只有一项服务应该在服务的其余部分保持空闲状态时才能正常工作。

我将在某个临时表中创建一些主列。我将启动任何一个服务并将其名称(pcname或位置名称)设置为主服务器以及此临时表中的最后访问时间。

其他服务读取主时间和上次访问时间。如果上次访问时间超过当前时间,那么我假设此服务停止工作,所以我做了一些其他服务,可以作为主时间使用,并将他的详细信息插入到temp表

答案 1 :(得分:0)

我已经看到了你的更新问题。正如我先前在我的回答中所说,在你的数据库中创建一些锁定表并创建lockholder(服务名称/ pcname / locationname)和lastlockaccess时间戳(此服务的lastaccesstime)列。手动插入详细信息任何一项服务,并在执行以下任务的每项服务中添加额外代码:

1>每个窗口服务连接到db并读取锁表记录 2 - ;假设有3个服务即A,B,C,你输入lockholder作为A,这意味着服务A正在访问数据库。 3 GT;当服务B和C检查锁定表时,如果服务A的lastlockaccess时间超过当前时间一段大的余量,他们将知道A正在DB上工作,那么这意味着服务A被停止。所以以编程方式为服务B和C插入新条目。无论哪个持有锁都会开始执行。

希望这个解决方案可以帮助你解决它不完善的问题。