我是 Hangfire 的新手,我想知道使用该工具是否可以实现这一目标:
我必须每天向 SQL 数据库中的人员列表发送电子邮件。问题是我的网络应用程序(尽管它只使用一个数据库)是通过 Amazon 部署的,负载均衡器可能会添加服务器(如果需要)。
我希望hangfire 任务每天只执行一次。
我的第一个想法是使用 Hangfire 在我的 Application_Start 方法上注册循环任务,但这行不通,对吗? 如何注册我的循环任务,即使我有多个服务器正在运行,该任务也只执行一次?我在其他帖子中读到,我可以对数据库做一些技巧:有一个“表”来注册任务是否已经执行,但我认为如果我必须这样做,这种解决方案将无法扩展,每天需要完成 10 个任务。
我想到的另一种方法是为hangfire执行创建一个单独的“应用程序”,仅部署在一台服务器中。由于我的网络应用程序使用 dll 来访问数据库,因此我可以对这个新的“应用程序”执行相同的操作,并使用相同的 dll 授予对数据库的访问权限,但每次更改时我都必须更新我的应用程序dll。
任何想法将不胜感激。谢谢!
最佳答案
让多个“任务”服务器运行 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)
{
....
}
关于c# - 使用hangfire在分布式环境中每天发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39706075/