2016-09-23 195 views
1

我正在处理一个应用程序,我在多台服务器上为不同的计算机执行长操作。在使用hangfire/topps写入的机器上运行Windows服务。每台机器一次只能运行一项操作。另外我想在每台服务器上定期执行一些状态检查和清理作业,所以我不能将它们作为作业排队。与多个服务器的Hangfire

有没有办法做到这一点在hangfire?另外,是否有办法将后续工作作为早期工作发送到同一台服务器?附加:我知道一种可能性是添加另一个hangfire层:使每个服务都成为一个拥有自己的数据库的hangfire客户端并自行服务,然后为他们安排重复工作,但这看起来非常复杂 - 尤其是扩展和添加服务器时。

+0

Hangfire以队列形式实现,每个作业只分配一个服务器,因此不需要担心。但是,没有能力建立与特定服务器AFAIK的亲和力。您必须在应用内协调,可能使用分布式缓存或键/值层。 – HackedByChinese

+0

@HackedByChinese:我知道每个工作只有一台服务器。我需要它,每台服务器一个作业。我可以用WorkerCount来做。但是接下来有一些工作要定期在每台服务器上运行,因为他们在服务器上进行清理...... – EluciusFTW

回答

0

如果您的任务是在每台服务器上运行某个计划任务,我认为最好的选择是自己实现它,Hangfire不支持事件处理,只支持命令处理。我认为,你已经达到了Hangfire的可能性,并需要转向更强大和通用的工具。

对于事件及其处理,您可以使用其他系统,例如RabbitMQ。您只需指定事件生成器并订阅此事件的所有机器。

+0

提交/收听Internet上的事件?机器不在本地网络中! – EluciusFTW

+0

他们可以无处不在。事件的概念和它们的处理在兔子中实现。所以,是的,你可以通过互联网订阅。阅读此:https://www.rabbitmq.com/tutorials/tutorial-three-dotnet.html – eocron

+0

我不确定我现在想要实现另一个外部工具,但感谢您的建议!如果我发现没有办法挂火,我可能会被迫。 – EluciusFTW

0

我知道这有点迟,但我们处理这类事情的方式只是编写一个简单的控制台应用程序并使用Windows任务计划程序进行计划。