2016-09-26 86 views
1

我是新与迟发型,我想知道这是否可以与工具实现的:使用迟发型发送邮件每天在分布式环境中

我发送每日的基础上,以电子邮件我在SQL DB中拥有的人员列表。事情是我的,我的网络应用程序(尽管它只使用一个数据库),通过亚马逊部署负载均衡器,可能会添加服务器(如果需要)。

我想让hangfire任务每天只执行一次。

我的第一个想法是使用Hangfire在我的Application_Start方法上注册经常性任务,但这不起作用,对吧? 我如何以一种方式注册我的经常性任务,即使我运行多个服务器时,该任务也只能执行一次?我在其他文章中读到过,我可以对数据库做一些技巧:有一个“表”,用于注册任务是否已经执行,但如果必须的话,我认为这种解决方案不会扩展。 ,每天完成10项任务。

我在想的另一种方法是为一个单独的“应用程序”执行hangfire,只在一台服务器上部署。由于我的网络应用程序使用DL​​L来访问数据库,我可以为这个新的“应用程序”做同样的事情,并授予与同一个DLL的数据库的访问权限,但每次更改时都必须更新我的应用程序DLL。

任何想法将不胜感激。谢谢!

回答

1

运行Hangfire的多个“任务”服务器没有问题。它是为此而设计的。

Hangfire.RecurringJob.AddOrUpdate<YourJobClass>(YourEmailJobID, x => x.YourMethodCall(anyParameter), Cron.Daily); 

查看Cron对象以获取更多选项。只要确保您为YourEmailJobID使用相同的ID,它就会按照您的预期工作。您可以从一百个不同的服务器上调用该方法一百次,只要您传入相同的参数,Hangfire数据库中的作业条目不会更改。另外,如果您有并行作业正在运行,但只希望其中一个任务服务器同时执行作业,请在Hangfire方法上使用此属性。

[Hangfire.DisableConcurrentExecution(60)] 
    public void YourMethodCall(object anyParameter) 
    { 
     .... 
    } 
+0

哇!这似乎很容易。我会试一试,让你知道。感谢西蒙! – tuchi35

+1

它的工作!非常感谢! – tuchi35