2016-02-29 65 views
0

在我的問題:是否有任何可以在所有服務器上運行的Hangfire作業?

1與約10服務器

2- Web場有存儲在數據庫

3-這些設置以高速率中使用的一些全局設置(每次請求約10次)

4-如果數據庫中的某些設置已更改,則Web場中的所有服務器都應更新其設置。

因此,在每個請求中引用數據庫似乎不是一個好的解決方案。 作爲結果,我寧願:

1存儲這些設置在static性能

2-每一臺服務器的重複工作,以檢查數據庫中每一秒的變化,然後更新這些static性能。

但似乎Hangfire作業只能在一臺服務器上運行。有沒有辦法強制它在所有服務器實例上調用作業?

回答

1

我可以得到遲髮型循環作業到用下面的代碼塊中的所有服務器上運行

串JOBNAME =的String.Format( 「{0} -CacheDepdencyCheck」,Environment.MachineName);

   RecurringJob.AddOrUpdate(jobName,() => CacheHelper.ClearExpirationCaches(), String.Format("*/{0} * * * *", frequency)); 
+0

謝謝,但它會在網絡園模式(當在一臺機器的處理器分佈式您的應用程序)失敗。 –

1

我認爲它在API級別還不支持此功能。但是,您可以通過使用「作業隊列」功能獲得解決方法。

舉例來說,如果你有10臺服務器,你可以用一些自定義的隊列名稱配置它們除了默認的一個,並在服務器指定它們啓動選項,請參閱本link

在你的客戶端代碼,您必須手動隊列中的作業:

var queueState = new EnqueuedState("custom_queue_name_*") // * = from 1 to 10

而且使用遲髮型客戶端與此隊列狀態,排隊的工作。

對於10個實例服務器組,使用自定義隊列名稱排列該作業十次,您將使它們到處運行。

務必使您的實際執行邏輯可重入。

+0

這種方法的問題是我們應該在某處保存數字(例如在web.config中)。當你有網絡花園(沒有網上農場)時,這種方法會失敗。我的意思是當你強迫IIS使用多個處理器而不是跨物理服務器集羣你的web應用程序 –

0

作爲Hangfire開發商提到here,此功能不可用Hangfire目前,他建議使用System.Threading.Timer

相關問題