.net 在分布式环境中每天使用hangfire发送电子邮件

fdx2calv  于 2023-03-20  发布在  .NET
关注(0)|答案(1)|浏览(112)

我是Hangfire的新手,我想知道这是否可以用该工具实现:
我必须每天发送电子邮件给我的SQL DB中的一组人。问题是我的Web应用程序(虽然它只使用一个DB)是通过亚马逊部署的,负载平衡器可能会添加服务器(如果需要)。
我希望延迟任务每天只执行一次。
我的第一个想法是使用Hangfire在我的Application_Start方法上注册周期性任务,但这行不通,对吗?我如何注册我的周期性任务,即使我有多个服务器运行,任务也只执行一次?我在其他帖子中读到过,我可以用DB做一些技巧:有一个“表”来记录任务是否已经执行,但我认为如果我必须每天完成10个任务,这种解决方案将无法扩展。
另一种方法是为hangfire执行单独的“应用程序”,它只部署在一个服务器上。由于我的Web应用程序使用dll访问数据库,我可以为这个新的“应用程序”做同样的事情,并使用相同的dll授予对数据库的访问权限,但我必须在每次更改dll时更新我的应用程序。
任何想法都将不胜感激。谢谢!

7uhlpewt

7uhlpewt1#

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

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

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

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

相关问题