2016-09-26 89 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