5

我需要每隔50秒左右向數據庫寫入一些數據。它類似於在後臺運行並默默執行其工作的Windows服務。在我的情況下,啓動和停止不是一種選擇,因爲我需要將少量先前插入的數據存儲在內存中。使用Windows Azure或AWS時,最佳解決方案是什麼?Windows Azure上的長時間運行(或永遠)任務

謝謝。

回答

7

使用Windows Azure,您可以選擇Web或Worker角色(基本上都是Windows 2008 Server R2或SP2),並具有某種類型的定時事件,正如@Lucifure所建議的。您也可以運行Quartz.net等調度程序,或利用Windows Azure隊列或服務總線隊列在特定時間顯示消息。但是:您不能在給定角色實例中執行「永久」任務,因爲定期重啓虛擬機實例(例如,每月主機操作系統維護)。通過關閉角色,您會收到通知,您可以在Stopping()OnStop()中處理這些關閉通知。如果您有多個實例,則可以使用調度程序或隊列來確保事件每隔50秒左右觸發一次,並在多個實例中進行處理(但在任何給定時間只能處理一個實例)。

要保留您的內存信息,一個想法是將該信息存儲在緩存中。你有兩種選擇:

  • 分佈式(共享)緩存服務,這已經有一段時間了。它獨立於角色實例運行。
  • 2012年6月推出的內存緩存。假設您有多個實例,緩存將分佈在這些實例中。您甚至可以在現有角色的內存中運行緩存。

關於緩存的更多信息是here

關於Quartz.net和Windows Azure,有幾個StackOverflow答案,如this one

1

您可以設置System.Threading.Timer每隔50秒觸發一次,並在事件發生時進行工作。