使用多台服务器进行Hangfire

时间:2016-09-23 06:52:56

标签: c# .net hangfire

我正在开发一个应用程序,我在不同的机器上有多台服务器为我做长时间操作。这些使用hangfire / topshelf编写的机器上运行了一个Windows服务。每台计算机一次只能运行一个操作。另外,我想在每台服务器上定期执行一些状态检查和清理作业,因此我不能将它们排队为作业。

有没有办法在hangfire中这样做?此外,有没有办法将后续作业发送到与早期作业相同的服务器?

ADD-ON:我知道有一种可能性就是添加另一个hangfire层:将每个服务作为一个拥有自己数据库的hangfire客户端并自行服务,然后为他们安排重复工作,但这看起来非常复杂 - 尤其是当扩展和添加服务器。

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

我知道这有点晚了,但我们处理这类事情的方法只是编写一个简单的控制台应用程序并使用Windows任务计划程序安排它。

答案 2 :(得分:0)

你现在可能已经解决了这个问题,但是

1 - 每个服务器一个作业 - 就像你拥有它一样 - 工作者数量 - 可能是最好的,因为每个服务器可以有多个队列,过滤器对你没有帮助。

2 - 每次处理工作后是否应该进行清理? 如果是的话,你可以在你的流程作业执行中创建清理作业(好吧可能不是完美的设计,但它工作正常)并分配到同一服务器上的队列,只需在过滤器中添加一些逻辑,以确保处理作业后面跟着一个清理工作,你已经整理好了。

或者您可以使用Continuation作业(如在网站上https://www.hangfire.io/) - 没有使用过这些,但听起来可能就是这样。

如果您只是想定期运行清理代码,那么只需将作业安排在每台服务器上重复出现