我是Hangfire的新手,我想知道这是否可以通过该工具实现:
我必须每天发送电子邮件到我在SQL DB中的人员列表。事情是我的我的网络应用程序(尽管它只使用一个数据库),通过亚马逊部署负载平衡器,可能会添加服务器(如果需要)。
我希望hangfire任务每天只执行一次。
我的第一个想法是使用Hangfire在我的Application_Start方法上注册循环任务,但这不起作用,对吧? 如何以一种方式注册我的周期性任务,即使我有多台服务器运行,任务只执行一次?我在其他帖子中读过我可以用数据库做一些技巧:有一个"表"如果任务已经执行,则注册,但我认为如果必须每天完成10个任务,那么这种解决方案将无法扩展。
我想的另一种方法是拥有一个单独的应用程序"对于hangfire执行,只在一台服务器上部署。由于我的网络应用程序使用dll访问数据库,我可以为这个新的" app"并使用相同的dll授予对数据库的访问权限,但每次更改dll时我都必须更新我的应用程序。
任何想法都将不胜感激。谢谢!
答案 0 :(得分:1)
让多个“任务”服务器运行Hangfire没有问题。它专为此而设计。
Hangfire.RecurringJob.AddOrUpdate<YourJobClass>(YourEmailJobID, x => x.YourMethodCall(anyParameter), Cron.Daily);
查看Cron对象以获取更多选项。只需确保为YourEmailJobID使用相同的ID,它将按预期工作。您可以从一百个不同的服务器中调用该方法一百次,只要传入相同的参数,Hangfire DB中的作业条目就不会更改。
此外,如果您正在运行并发作业,但只希望其中一个任务服务器一次执行作业,请在Hangfire方法上使用此属性。
[Hangfire.DisableConcurrentExecution(60)]
public void YourMethodCall(object anyParameter)
{
....
}